26. november 2002 - 15:30Der er
38 kommentarer og 1 løsning
Simpel fejl i kode men hvor ???
Jeg har lavet disse 2 Timere hvilke begge er Disabled...
procedure Txit.nedTimer(Sender: TObject); var H : Integer; begin if H > 60 then begin H := IntToStr(lbl.caption); H := H - 1; lbl.caption := StrToInt(H); end; if H < 60 then begin ned.Enabled := false; end; end;
procedure Txit.opTimer(Sender: TObject); var H : Integer; begin if H < 108 then begin H := IntToStr(lbl.caption); H := H + 1; lbl.caption := StrToInt(H); end; if H > 108 then begin op.Enabled := false; end; end
2 tilhørende knapper enabler dem hver især...
men lbl stiger til 108 og hvis man trykker på den tilhørende knap sker der heller ikke mere... Sådan skal det være... men med Knapper der slår til ved under 60 virker ikke optimalt.... når den når ned på de 60 stykker og man trykker igen trækker den blot en mere fra og det er ikke meningen...
Først og fremmest tager du ikke højde for at H= 60 eller H=108
procedure Txit.nedTimer(Sender: TObject); var H : Integer; begin if H < 60 then begin H := IntToStr(lbl.caption); H := H - 1; lbl.caption := StrToInt(H); end else begin ned.Enabled := false; end; end;
procedure Txit.opTimer(Sender: TObject); var H : Integer; begin if H < 108 then begin H := IntToStr(lbl.caption); H := H + 1; lbl.caption := StrToInt(H); end else begin op.Enabled := false; end; end.
Hvis lbl er en label kan følgende ikke lade sig gøre H := IntToStr(lbl.caption);, så jeg er nu ikke så sikker på du kan compilere din kode?
Jeg kan heller ikke se hvad det er du vil lave helt præcist da den kode hvor du enabler dine timere ikke er med,men skal den stå og tælle op og ned mellem 60 og 108 ?
type TForm1 = class(TForm) Op: TTimer; Ned: TTimer; lbl: TLabel; procedure OpTimerTimer(Sender: TObject); procedure NedTimerTimer(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; Tid: Integer= 66; implementation
{$R *.dfm}
procedure TForm1.OpTimerTimer(Sender: TObject); begin if Tid < 108 then begin Tid := Tid + 1; lbl.caption := IntToStr(Tid); end; if Tid > 108 then Op.Enabled := false; end;
procedure TForm1.NedTimerTimer(Sender: TObject); begin if Tid > 60 then begin Tid := Tid - 1; lbl.caption := IntToStr(Tid); end; if Tid < 60 then Ned.Enabled := false; end;
Jeg brugte bare lbl for ikke at skabe for stor forvirring... Jeg skal jo bare bruge en "standard" løsning...
Her er kode som jeg har den i mit projekt...:
procedure Txit.opTimer(Sender: TObject); var H : Integer; begin if H > 60 then begin H := Xit.Height; H := H - 1; Xit.Height := H; end; if H < 60 then begin op.Enabled := false; end; end;
procedure Txit.nedTimer(Sender: TObject); var H : Integer; begin if H < 108 then begin H := Xit.Height; H := H + 1; Xit.Height := H; end; if H > 108 then begin ned.Enabled := false; end; end;
Her har du din løsning, opret et nyt projekt og sæt følgende på din form:
2 Button, den ene kalder du ButtonOp, den anden ButtonNed 1 Timer, den kalder du TimerOpNed 1 Label den kalder du lbl Samt følgende globale variable: Max: Integer = 108; Min: Integer = 60; Tal: Integer; TaelOp, TaelNed: Boolean;
Indsæt så nedenstående kode på de tilhørende events, hvis du ligger din emailadr. så skal jeg sende dig projektet
procedure TForm1.FormCreate(Sender: TObject); begin Tal:= Min; end;
procedure TForm1.ButtonOpClick(Sender: TObject); begin TaelOp:= True; TaelNed:= False; end;
procedure TForm1.ButtonNedClick(Sender: TObject); begin TaelOp:= False; TaelNed:= True; end;
procedure TForm1.TimerOpNedTimer(Sender: TObject); begin if TaelOp and (Tal < Max) then Inc(Tal); if TaelNed and (Tal > Min) then Dec(Tal); lbl.Caption:= IntToStr(Tal); end;
procedure Txit.TimeropnedTimer(Sender: TObject); begin if TaelOp and (Tal < Max) then Inc(Tal); if TaelNed and (Tal > Mini) then Dec(Tal); Xit.Height := Tal; end;
BTW: Hvor hurtigt tæller Inc & Dec op/ned.... skal jo ikke gå direkte fra 60 - 108.... intervallet for at stige/falde 1 skal være intervallet på Timeren...
procedure Txit.nedTimer(Sender: TObject); var H : Integer; begin if H > 60 then <--- Hvad er H her? Den er ikke initialiseret begin H := IntToStr(lbl.caption); <--- Her... H := H - 1; lbl.caption := StrToInt(H); <---- og her bytter du om på IntToStr og StrToInt end; if H < 60 then begin ned.Enabled := false; end; end;
Prøv sådan her...
procedure Txit.nedTimer(Sender: TObject); var H : Integer; begin H := StrToInt(lbl.caption); if H > 60 then begin H := H - 1; lbl.caption := IntToStr(H); end; if H < 60 then begin ned.Enabled := false; end; end;
Dermed ikke sagt at jeg ville gøre det på den måde.... Det er jo heller ikke mit program så det er jo også sagen uvedkommende.
Var det ikke hvad du gjorde forkert du ville vide? og ikke hvordan man ellers kan lave det?
Kan i ikke give et forslag der matcher det jeg kom med som udgangs punkt... Jeg har KOPIERET dele af dit projekt over i mit eget men virker ikke... Dit virker mit gør ikke.... Aner ikke hvad jeg har gjort galt... Den giver ingen fejl
jeg har KOPIERET dit så der er IKKE fejl.... kan jeg ikke få en anden løsning... Evt en modificeret forslag af den jeg kom med...
Kan ikke poste Projektet, der er TOP-SECRET
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.