07. marts 2003 - 14:03Der er
15 kommentarer og 1 løsning
læse fra edit1, edit2, edit3 osv
Hej, Jeg er ved at lave en label, der skal køre henover skærmen (ligesom en marquee). Når den er kørt hen over en gang skal den næste edit.text puttes ind i label1.caption og køre over skærmen osv. Mit problem er bare at jeg ikke kan finde ud af hvordan jeg får edit2.text til at være efter edit1.text, hvis I forstår mig.
procedure TForm1.Timer1Timer(Sender: TObject); begin if FirstRun then begin FirstRun := False; BoxNo := 1; Label1.Caption := Boxe[BoxNo].Text; end; if Label1.Left >= 200 then begin if BoxNo = 3 then //Antal edit felter Timer1.Enabled := False else begin Inc(BoxNo); Label1.Left := 10; Label1.Caption := Boxe[BoxNo].Text; end; end else Label1.Left := Label1.Left + 5;
Kan jeg også få dig til at fortælle mig hvad de forskellige ting gør? F.eks. hvad er Firstrun, hvor kommer Boxno fra, hvad betyder Inc(BoxNo)? Jeg er ret ny, mht. programmering.
Kunne boxno ikke ligeså godt defineres under Var? Jeg har Delphi 3 for Dummies (som jeg har købt i tidernes morgen), men jeg synes ikke at jeg kunne finde noget om det her - Derfor spurgte jeg på eksperten.
type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Timer1: TTimer; Button1: TButton; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private FirstRun: Boolean; //Idikerer om det er første gang vi kører Boxe: Array[1..3] of TEdit; //Array der indeholder de 3 (kan sagtens laves størrer) edit felter BoxNo: Integer; //Viser hvilket et af felterne vi er ved { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Timer1Timer(Sender: TObject); begin if FirstRun then begin //Hvis det er første gang, så tager vi teksten fra det første edit felt og sætter ind i Label1 FirstRun := False; //Det er ikke længere første gang vi kører BoxNo := 1; //Første edit felt Label1.Caption := Boxe[BoxNo].Text; //Sæt teksten fra felt X ind i label1 end; if Label1.Left >= 200 then begin //Hvis vi er nået til kanten (altså hvor lang til højre den skal)... if BoxNo = 3 then //...og vi er ved sidste edit felt... Timer1.Enabled := False //...stop da timer1 da vi er nået til kanten med det sidste edit felt else begin //Vi er nået til kanten, men ikke det sidste edit felt.. Inc(BoxNo); //inkrementerer positionen i array'et så vi vælger det næste edit felt Label1.Left := 10; //Flyt label1 ud til venstre igen Label1.Caption := Boxe[BoxNo].Text; //Hent den næste tekst end; end else //Vi er ikke ved kanten... Label1.Left := Label1.Left + 5; //...så vi flytter label1 lidt længere til højre
end;
procedure TForm1.FormCreate(Sender: TObject); begin FirstRun := True; //Det er første gang vi kører Boxe[1] := Edit1; //Navnet på det første edit felt Boxe[2] := Edit2; //Navnet på det andet edit felt Boxe[3] := Edit3; //Navnet på det tredje edit felt end;
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := True; //Start timeren så label1 flytter sig end;
BoxNo ligger ikke i Timer1's Var del da vi jo ikke skal lave variablen hver gang vi skal flytte label1. Desuden skal vi jo overordnet holde styr på hvor langt vi er nået.
Jeg skrev: Det kan jeg godt se, men hvorfor skal den ligge under: implementation var BoxNo: integer; Istedet for under private? Men mente: Det kan jeg godt se, men hvorfor skal den IKKE ligge under: implementation var BoxNo: integer; Istedet for under private?
Så har jeg fået det til at virke, men jeg har altså puttet Boxe: Array[1..3] of TEdit; BoxNo: Integer; ind under Implementation Var Hvilket virker, i modsætning til det andet.
Tak for hjælpen - Havde helt glemt at jeg ikke havde acepteret.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.