Avatar billede danielks Nybegynder
26. november 2002 - 15:30 Der 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...
Avatar billede morten_s Nybegynder
26. november 2002 - 15:38 #1
Hvad er lbl? en label
Avatar billede assassin Juniormester
26. november 2002 - 15:47 #2
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.

Hvor initialisere du H??
Avatar billede danielks Nybegynder
26. november 2002 - 15:50 #3
Initialisere H ???

og ja lbl er en label, men det er jo sagen uvedkommende...
Avatar billede dkn Nybegynder
26. november 2002 - 15:51 #4
jeg tror du skal køre H som en delt værdi hvis du skal have det til at virke som jeg tror du vil:

var
  H : Integer;

//dine funcs her
Avatar billede assassin Juniormester
26. november 2002 - 15:53 #5
Kan du ikke smide hele koden?
Avatar billede morten_s Nybegynder
26. november 2002 - 15:53 #6
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 ?


Prøv evt. følgende:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

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;

end.
Avatar billede danielks Nybegynder
26. november 2002 - 15:55 #7
Er det ikke ligemeget om jeg har defineret =60 & =108 ???
Jeg har jo defineret at hvis den kommer under 60 skal:

    H := IntToStr(lbl.caption);
    H := H - 1;
    lbl.caption := StrToInt(H);

ikke udføres mere...

Vi kalder knapperne Op & Ned for at gøre det nemmere

Hvis man trykker på Op tæller den op til 108 og stopper... Hvis man så trykker igen ster der ikke noget (DET ER SÅDAN DET SKAL VÆRE)

Hvis man trykker på Ned tæller den ned til 60 og stopper... Hvis man så trykker igen kører den "-" stykket (DET ER NOGET LORT)
Avatar billede morten_s Nybegynder
26. november 2002 - 15:56 #8
Ja men det er måske fordi begge dine timere er enabled på en gang, så tæller den jo både op og ned for hver gang ;-)
Avatar billede morten_s Nybegynder
26. november 2002 - 15:58 #9
Og ja det vil være en god ide at definere H som en global variabel, sådan som du har gjort er den H du har under op ikke den samme H som under ned
Avatar billede danielks Nybegynder
26. november 2002 - 15:59 #10
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?

Hvorfor skulle det ikke virke ???
Avatar billede morten_s Nybegynder
26. november 2002 - 16:01 #11
fordi at lbl.caption er en string og IntToStr laver en integer om til en string

følgende vil virke
lbl.caption:= IntToStr(H);
Avatar billede assassin Juniormester
26. november 2002 - 16:02 #12
Men du har ikke defineret hvad der skal ske hvis H=60
Avatar billede danielks Nybegynder
26. november 2002 - 16:03 #13
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;
Avatar billede morten_s Nybegynder
26. november 2002 - 18:58 #14
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





unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    TimerOpNed: TTimer;
    ButtonOp: TButton;
    ButtonNed: TButton;
    lbl: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure ButtonOpClick(Sender: TObject);
    procedure ButtonNedClick(Sender: TObject);
    procedure TimerOpNedTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Max: Integer = 108;
  Min: Integer = 60;
  Tal: Integer;
  TaelOp, TaelNed: Boolean;
implementation

{$R *.dfm}

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;

end.
Avatar billede danielks Nybegynder
26. november 2002 - 19:12 #15
[Error] Unit1.pas(179): Incompatible types: 'Integer' and 'TEdit'

Ved:

Tal:= Min;
Avatar billede morten_s Nybegynder
26. november 2002 - 19:15 #16
Har du allerede et Edit felt som hedder Tal?

Hvorfor ligger du ikke lige din mailadr, så skal jeg sende det tildig
Avatar billede danielks Nybegynder
26. november 2002 - 19:17 #17
Sende hvad ??? er det lovligt på E ???
Avatar billede morten_s Nybegynder
26. november 2002 - 19:19 #18
Ja da....jeg har jo lagt løsningen som jeg sender til dig ;-)
Avatar billede danielks Nybegynder
26. november 2002 - 19:20 #19
Hvis det er den du har lagt... hvorfor så sende den ???
Avatar billede morten_s Nybegynder
26. november 2002 - 19:22 #20
Du kan jo tilsyneladende ikke få det til at virke?
Avatar billede danielks Nybegynder
26. november 2002 - 19:24 #21
Sry... have en Min allerede...
Avatar billede morten_s Nybegynder
26. november 2002 - 19:24 #22
Tænkte jeg nok
Avatar billede danielks Nybegynder
26. november 2002 - 19:34 #23
Oki ingen fejl i koden nu.... ikke efter delphi ihvertfald...

men ligemeget om jeg trykker på:

procedure TForm1.ButtonOpClick(Sender: TObject);
begin
  TaelOp:= True;
  TaelNed:= False;
end;
eller:

procedure TForm1.ButtonNedClick(Sender: TObject);
begin
  TaelOp:= False;
  TaelNed:= True;
end;

Så bliver Tal 60 med det samme...
Avatar billede morten_s Nybegynder
26. november 2002 - 19:35 #24
Din start værdi sætter du op her
procedure TForm1.FormCreate(Sender: TObject);
begin
  Tal:= Min;
end;

og da min er 60 starter den ved 60, hvis du ønsker at starte ved 0 gør du sådan her

procedure TForm1.FormCreate(Sender: TObject);
begin
  Tal:= 0;
end;
Avatar billede danielks Nybegynder
26. november 2002 - 19:36 #25
Timer:

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...
Avatar billede morten_s Nybegynder
26. november 2002 - 19:38 #26
Inc og Dec tæller op/ned med 1
Avatar billede morten_s Nybegynder
26. november 2002 - 19:39 #27
Og den gør det med intervallet på timeren, hvis jeg skal sende det til dig skal du ligge din mail adr. nu da jeg lukker ned lige om lidt
Avatar billede danielks Nybegynder
26. november 2002 - 19:51 #28
Jeg fatter stadig ikke hvad du har tænkt dig at sende....
Avatar billede morten_s Nybegynder
26. november 2002 - 19:54 #29
Glem det...........

Ser bare ud som om du har besvær med at få det til at virke, det var kun for at hjælpe dig
Avatar billede loke-liscom Nybegynder
27. november 2002 - 16:40 #30
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?

//Klaus
Avatar billede danielks Nybegynder
27. november 2002 - 16:51 #31
Den løsning i kom frem med ser bedre ud... dog som du siger er H ikke initialiseret... Hvad skal jeg ændre ???
Avatar billede morten_s Nybegynder
27. november 2002 - 17:23 #32
Har du endnu ikke fået min løsning op og kører?
Avatar billede danielks Nybegynder
27. november 2002 - 18:37 #33
nej...
Avatar billede morten_s Nybegynder
27. november 2002 - 19:25 #34
jamen så skriv da din mail adr. og jeg sender
Avatar billede danielks Nybegynder
27. november 2002 - 19:27 #35
dumazz@ofir.dk
Avatar billede morten_s Nybegynder
27. november 2002 - 19:45 #36
Er sendt
Avatar billede danielks Nybegynder
27. november 2002 - 20:25 #37
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
Avatar billede morten_s Nybegynder
27. november 2002 - 21:47 #38
Så må du give en præcis projektbeskrivelse, eller evt. sende det du har til mig.
Avatar billede danielks Nybegynder
28. november 2002 - 21:03 #39
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester