// Eine Datei wird ausgelesen und als Ticker (Laufschrift) angezeigt.
// Getestet mit D4 unter Win98 // Diese Programm
liest den Inhalt einer Textdatei aus unit Unit1;
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms,
ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private-Deklarationen}
public
procedure lauf(sender: tobject);
procedure ausgabe;
function lesen: char;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
const
geschw: integer = 150;
oben: integer = 5;
lang: integer = 25;
offen: boolean = false;
ZusatzLeerzeichenBeiZeilenEnde: integer = 10;
ZusatzLeerzeichenBeiTab: integer = 3;
zahl: integer = 0;
txt: string = #32#32#32#32#32#32#32#32;
var
foc: file of char;
tt: TTimer;
links: integer;
function TForm1.lesen: char;
begin
if zahl > 0 then begin
dec(zahl); result := #32; exit;
end;
repeat
if eof(foc) then seek(foc, 0);
read(foc, result);
if result = #13 then zahl := ZusatzLeerzeichenBeiZeilenEnde
else if result = #9 then begin
zahl := ZusatzLeerzeichenBeiTab;
result := #32;
end else
if result < #32 then result := #32;
until result > #31;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
assignfile(foc, 'c:\autoexec.bat');
{$I-}
reset(foc);
if ioresult = 0 then begin
if filesize(foc) = 0 then begin
closefile(foc);
exit;
end;
offen := true;
for i := length(txt) to lang do begin
txt := txt + lesen;
end;
canvas.font.name := 'Fixedsys';
canvas.font.color := claqua;
canvas.Brush.color := 0;
links := (width - canvas.textwidth(#32 + txt + #32)) div 2;
tt := TTimer.create(self);
tt.ontimer := lauf;
tt.interval := geschw;
end;
{$I+}
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if offen then begin
closefile(foc);
tt.free;
tt := nil;
end;
end;
procedure Tform1.ausgabe;
begin
canvas.textout(links, oben, #32 + txt + #32);
end;
procedure TForm1.lauf(sender: tobject);
begin
txt := copy(txt, 2, lang) + lesen;
ausgabe;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
if offen then ausgabe;
end;
end.
//------------------------------------------------------------------
// Variante 2: Smooth-Ticker
// Dieses Programm erzeugt ein "weiches" Scrollen. Der Text wird aus einer
// Textdatei gelesen. Allerdings darf pro Einzeltext kein Steuerzeichen
// (also z.B. kein Tab) vorhanden sein. Absätze sind auch nicht erlaubt.
// Ich nutze diesen Code um Witze aus einer Datei zu lesen und auf dem
// Formular scrollen zu lassen. Das bedeutet, den Witz komplett ohne Zeilen-
// unbruch und ohne Absatz in die Textdatei zu schreiben und erst am Ende des
// Witzes einmal ENTER zu drücken.
unit Laufs;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen}
public
procedure zeigen;
procedure weiter;
procedure schreiben;
end;
var
Form1: TForm1;
bmp: TBitmap;
sl: TStringlist;
lg: array of integer;
rz: TRect;
txt: array[0..1] of integer;
leer: string;
const
breite: integer = 300; // Breite des Laufschriftfeldes
links: integer = 100; // linke Kante der Laufschrift
oben: integer = 10; // obere Kante der Laufschrift
stelle: integer = 0;
farbe: integer = 0;
colours: array[0..6] of TColor =
(cllime, $BBDDFF, claqua, clyellow, $FF90FF, $FFA033, $00A0FF);
Farbwechsel: boolean = true;
implementation
{$R *.DFM}
uses math;
type
TMein = class(TThread)
procedure Execute; override;
procedure doit;
end;
const
lauf: boolean = true;
geschw = 13;
procedure TMein.doit;
begin
Form1.zeigen;
inc(stelle);
if stelle > lg[txt[0]] then begin
stelle := 0;
Form1.weiter;
end;
end;
procedure TForm1.zeigen;
begin
canvas.copyrect(rz, bmp.canvas, rect(stelle, 0, breite + stelle, bmp.height));
end;
procedure TMein.Execute;
var
zeit: longword;
begin
repeat
if lauf then synchronize(doit);
zeit := gettickcount + geschw;
repeat
until gettickcount >= zeit;
until false;
end;
procedure TForm1.schreiben;
begin
bmp.canvas.font.color := colours[farbe];
bmp.canvas.TextOut(0, 1, leer + sl[txt[0]]);
if Farbwechsel then begin
inc(farbe);
if farbe = length(colours) then farbe := 0;
bmp.canvas.font.color := colours[farbe];
end;
bmp.canvas.TextOut(lg[txt[0]], 1, leer + sl[txt[1]]);
end;
procedure TForm1.weiter;
var
x: integer;
begin
for x := 0 to 1 do begin
inc(txt[x]);
if txt[x] > sl.count - 1 then txt[x] := 0;
end;
schreiben;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
x, maxz, minz: integer;
begin
leer := StringOfChar(#32, 18);
canvas.pen.color := clwhite;
bmp := tbitmap.create;
bmp.canvas.Brush.color := $404040;
bmp.canvas.font.name := 'Courier New';
bmp.canvas.font.size := 9;
sl := TStringlist.create;
try
sl.loadfromfile('c:\witze.txt');
except exit; end;
if sl.count = 0 then exit;
setlength(lg, sl.count);
maxz := 0;
minz := maxint;
for x := 0 to sl.count - 1 do begin
lg[x] := bmp.canvas.textwidth(sl[x] + leer);
maxz := max(lg[x], maxz);
minz := min(lg[x], minz);
end;
bmp.width := maxz * 2;
breite := min(minz, breite);
bmp.height := bmp.canvas.textheight(sl[0]) + 2;
bmp.Canvas.fillrect(bmp.canvas.cliprect);
rz := rect(links, oben, links + breite, oben + bmp.height);
txt[0] := 0;
txt[1] := ord(sl.count > 1);
schreiben;
TMein.create(false);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
lg := nil;
bmp.free;
sl.free;
end;
procedure TForm1.FormPaint(Sender: TObject);
const
rand = 2;
begin
canvas.brush.color := bmp.canvas.brush.color;
canvas.fillrect(rect(links - rand, oben, links, oben + bmp.height));
canvas.fillrect(rect(links + breite, oben, links + breite + rand, oben + bmp.height));
canvas.brush.style := bsclear;
zeigen;
canvas.rectangle(links - 1 - rand, oben - 1, links + breite + 1 + rand, oben + bmp.height + 1);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
lauf := not lauf;
end;
end.
|





