// Senkrechte
Laufschriften. type wie = (mittedick, obendick, untendick, normal); lage = -10..10; const oben = 5; var txt: string; abstand, lang, mitte, groesse: integer; art: wie = mittedick; // bestimmt das Aussehen schraeg: lage = 0; // positive Werte = nach unten rechts; // negative Werte = nach unten links; // 0 = senkrecht nach unten welcher: integer = 0; // welcher Buchstabe wird gerade gezeigt anzahl: integer = 14; // Buchstaben, die gleichzeitig zu sehen sind links: integer = 25; procedure TForm1.FormCreate(Sender: TObject); begin txt := 'Das ist eine senkrechte Laufschrift zu Testzwecken '; lang := length(txt); if anzahl > lang then anzahl := lang; mitte := anzahl div 2; txt := txt + txt; Timer1.interval := 400; // nicht zu schnell!!! canvas.brush.color := color; canvas.brush.style := bsSolid; canvas.font.color := clred; canvas.font.name := 'Courier New'; // feste Breite empfohlen canvas.font.style := [fsbold]; if schraeg < 0 then dec(links, schraeg * anzahl); end; procedure TForm1.Timer1Timer(Sender: TObject); var x, diff: integer; begin inc(welcher); if welcher > lang then welcher := 1; abstand := 0; case art of normal: groesse := 16; obendick: groesse := 22; else groesse := 9; end; for x := 0 to anzahl - 1 do begin canvas.font.size := groesse; diff := groesse div 4; // leichte Korrektur des Aussehens canvas.textout(schraeg * x + links - 5 - diff, oben + abstand, #32#32#32#32#32); canvas.textout(schraeg * x + links - diff, oben + abstand, txt[welcher + x]); abstand := abstand + canvas.textheight(txt); case art of mittedick: if x < mitte then inc(groesse, 2) else dec(groesse, 2); obendick: dec(groesse); untendick: inc(groesse); end; end; end;
const links = 20; geschw = 100; warten = 1000; weg = #32#32#32#32#32; // bei fester Breite reichen zwei Zeichen var farbwechsel: boolean = true; hoch, unten, merk: integer; farbe: TColor = clblue; welches: integer = 0; // welches Wort wieviel: integer = 1; // wieviel Buchstaben werden angezeigt anzahl: integer = 0; sl: Tstringlist; txt: string; procedure TForm1.FormCreate(Sender: TObject); var x, lg: integer; begin sl := Tstringlist.create; txt := 'Diese Laufschrift besteht aus mehreren Worten'; canvas.brush.color := color; canvas.brush.style := bsSolid; canvas.font.color := farbe; canvas.font.name := 'Courier New'; // feste Breite empfohlen canvas.font.style := [fsbold]; canvas.font.size := 20; hoch := canvas.textheight(txt); sl.commatext := txt; anzahl := 0; for x := 0 to sl.count - 1 do begin lg := length(sl[x]); if anzahl < lg then anzahl := lg; end; unten := anzahl * hoch; if unten + hoch > clientheight then clientheight := unten + hoch else unten := ((clientheight - hoch) div hoch) * hoch; merk := unten; Timer1.interval := geschw; end; procedure TForm1.FormDestroy(Sender: TObject); begin sl.free; end; procedure TForm1.Timer1Timer(Sender: TObject); var x: integer; zeit: longword; begin for x := 0 to wieviel - 1 do begin canvas.textout(links, unten + x * hoch, sl[welches][x + 1]); canvas.textout(links - 5, unten + x * hoch + hoch, weg); end; dec(unten, hoch); if wieviel = length(sl[welches]) then begin if unten >= 0 then exit; timer1.interval := 0; zeit := gettickcount + warten; repeat application.processmessages; until gettickcount >= zeit; for x := 1 to length(sl[welches]) do canvas.textout(links - 5, unten + x * hoch, weg); wieviel := 1; unten := merk; inc(welches); if welches = sl.count then begin welches := 0; zeit := gettickcount + warten; refresh; repeat application.processmessages; until gettickcount >= zeit; if farbwechsel then begin repeat canvas.font.color := RGB(random(2) * $FF, random(2) * $FF, random(2) * $FF); until canvas.font.color <> farbe; farbe := canvas.font.color; end; end; Timer1.interval := geschw; end else inc(wieviel); end; //------------------------------------------------------------------------ type TTMein = class(TThread) procedure Execute; override; procedure doit; end; var rc: TRect; bm: TBitmap; txt: string; TMein: TTMein; hoch, mitte, breit, buchst, anzahl, ausschnitt, stelle: integer; const rand = 3; links = 10; geschw = 15; procedure TTMein.doit; begin form1.canvas.copyrect(rc, bm.canvas, rect(0, stelle, breit, stelle + ausschnitt)); inc(stelle); if stelle = mitte then stelle := 0; end; procedure TTMein.Execute; var zeit: cardinal; begin repeat synchronize(doit); zeit := gettickcount + geschw; repeat until gettickcount >= zeit; until false; end; procedure TForm1.FormCreate(Sender: TObject); var x, y: integer; begin bm := TBitmap.Create; txt := ' Das ist eine senkrechte Laufschrift in einer Bitmap '; anzahl := length(txt); with bm.canvas do begin font.color := clnavy; font.name := 'Courier New'; // empfohlen font.style := [fsbold]; font.size := 18; buchst := textheight(txt); mitte := buchst * anzahl; breit := 0; for x := 1 to length(txt) do begin y := textwidth(txt[x]); if y > breit then breit := y; end; inc(breit, 2 * rand); txt := txt + txt; inc(anzahl, anzahl); hoch := buchst * anzahl; bm.width := breit; bm.height := hoch; pen.style := psclear; brush.color := color; // oder andere Farbe fillrect(cliprect); for x := 0 to anzahl - 1 do textout(rand, x * buchst, txt[x + 1]); end; ausschnitt := buchst * anzahl; if ausschnitt > clientheight then ausschnitt := clientheight; stelle := 0; rc := rect(links, 0, links + breit, ausschnitt); TMein := TTMein.create(false); TMein.priority := tpLower; end; procedure TForm1.FormDestroy(Sender: TObject); begin TMein.suspend; Application.processmessages; TMein.free; bm.free; end; procedure TForm1.Button1Click(Sender: TObject); begin if TMein.suspended then TMein.resume else TMein.suspend; end; |