Autor Beitrag
Delphi-sparky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Di 03.12.02 23:21 
So, ich würd mich mal über ne kurze info freuen.
folgendes ich würd gern in einem edit feld zeit laufen lassen.
sprich 1-2-3-4-5-6-7-8 usw.
das soll ein timer machen, oder geht das auch anders?

_________________
Lieber dumm fragen <-> Als selbst nachdenken | thx for comment @ Wolff68 ;)
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 03.12.02 23:42 
Timer ist dazu gut geeignet:

ausblenden Quelltext
1:
2:
3:
4:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Edit1.Text := IntToStr(StrToIntDef(Edit1.Text, 0) + 1)
end;
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Di 03.12.02 23:55 
Also Du willst am anfang eine 1 und nach einer bestimmten Zeit eine 2 im Editfenster?

Da würde ich Dir schon einen Timer empfehlen.
Mit folgendem Code und Timer1.Interval := 1000 schreibt er Dir jede Sekunde die nächste Zahl ins Edit.
ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Tag := Timer1.Tag + 1;
  Edit1.Text := IntToStr(Timer1.Tag);
end;
Oder willst Du später 1-2-3-4 usw drin haben? Dann schreib eben Edit1.Text := Edit1.Text+'-'+IntToStr(Timer1.Tag);
Ich hab hier mal die Tag-Eigenschaft genommen. Dann hast die Zahl auch im Timer gespeichert. Geht natürlich auch mit einer globalen Variablen.

Andere Möglichkeit!? Nun, Du könntest natürlich auch mit Sleep(1000) Dein ganzes Programm einfrieren, aber ich denke nicht, daß das in Deiner Absicht liegt...

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Delphi-sparky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mi 04.12.02 00:10 
herzlichen dank für eure schnelle hilfe.. :D

nur eins stört mich noch, für die erste sekunde steht immernoch "edit1" da und dann wechselt er erst auf 1 und 2 usw.
wie bekomm ich das hin das da nur ein leeres edit feld steht und dann ..

.. per buttonklick der timer anspringt?

sprich:

Button draufklicken -> editfeld geht zeit los (leer-1-2-3-usw.)

_________________
Lieber dumm fragen <-> Als selbst nachdenken | thx for comment @ Wolff68 ;)
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Mi 04.12.02 00:50 
Also das Edit kannst ja bereits im Entwurf leermachen.
Einfach im Objektinspector Edit1 / Text leermachen.

Daß der Timer erst bei ButtonClick losrennt machst über die Timer.Enabled Eigenschaft. Dazu ebenfalls im Entwurfsmodus den Timer.Enabled auf false und dann im ButtonClick Timer.Enabled := true; (Da könntest zB auch das Edit gleich mit 0 füllen oder nochmal leermachen.)

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Delphi-sparky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mi 04.12.02 01:02 
mh beim ausführen ging das mit dem leeren net, jetzt wo ich delphi komplett nue gestartet hatte scho, egal .. danke :)

2te funktioniert auch :lol:

nun gleich das nächste :cry:
Nun möchte ich gern, das in einem 2ten edit feld die anzahl der klicks auf den button gezählt wird. dabei soll es der gleiche button sein der auch den timer aktiviert hatte.

Sprich:
Button drücken -> timer geht los -> gleichzeitig anzahl: 1 nochma klicken anzahl: 2 usw.

und dann etwa bei 50 klicken soll in einer showmessage ein text kommen:
"Sie haben für 50 klicks XX zeit gebraucht" :wink:

_________________
Lieber dumm fragen <-> Als selbst nachdenken | thx for comment @ Wolff68 ;)
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Mi 04.12.02 01:34 
Kommst Du da wirklich nicht selber drauf, oder sollte Deine Signatur eher heisen: Lieber dumm Fragen als selber nachdenken?

Sorry, bitte nicht übel nehmen. Aber alles was Du brauchst steht hier in diesem Topic schon drin...

Also. Button2 soll den ZahlenInhalt von Edit2 um eins erhöhen...
Zitat:
Edit1.Text := IntToStr(StrToIntDef(Edit1.Text, 0) + 1)
Wie wärs damit? Nur eben mit Edit2 und unter Button2Click.

Und mit folgender Abfrage bringst Du die Message:
IF StrToIntDef(Edit2.Text,0) = 50 then MessageBox('Schon 50x geklickt');Natürlich auch unter Button2Click.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Delphi-sparky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mi 04.12.02 21:27 
ja sorry :(

bin halt ein neuling...

gut nur eins noch ...
... wenn ich den code benutze kommt:

Inkompatible Typen: 'Interger' und 'String'.

ich hoffe mal das das net wieder sone einfache lösung beherbergt, hab einiges ausprobiert nur funktioniert das net so wie das gehn sollte.

_________________
Lieber dumm fragen <-> Als selbst nachdenken | thx for comment @ Wolff68 ;)
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Mi 04.12.02 22:38 
Suche mal in der Hilfe nach StrToInt, dann findest Du etwas.
Delphi-sparky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 05.12.02 20:55 
mh also wenn ich ehrlich bin hat mich das nicht weiter gebracht.
ich komm nicht dahinter was an dem code falsch sein soll.
hab mir hilfe mehrmals angesehn und einiges versucht komm net dahinter.

ma ne andere frage, hattet ihr am anfang auch solch probleme oder sollte ich das mit delphi lieber lassen? :cry:

_________________
Lieber dumm fragen <-> Als selbst nachdenken | thx for comment @ Wolff68 ;)
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Do 05.12.02 21:13 
Sicher hatten (und haben) auch wir solche Probleme.
OK, ich verallgemeiner da vielleicht, aber zumindest bei mir ist es so. (Wenn auch nicht gerade bei Interger und Strings,...)

Also nicht den Mut verlieren! Nachdem Du schon mal dieses Forum kennst, bist schon mal einiges besser dran als ich vor 10 Jahren.
Delphi ist ein gewaltiges Ding. Und Du wirst immer wieder auf Dinge Stoßen, die Du nicht gleich kapierst. Das geht mir Heut noch so.
Aber wenn Du zu Beginn vielleicht noch ein gutes Einsteigerbuch durcharbeitest solltest Du bald über die ersten Hürden hinweg sein.

Aber zurück zu Deinem Problem:
Schreib doch am besten mal was Du bisher in Deiner Prozedur hast. Ansonsten können wir nur raten wo der Fehler liegt. Der bisher von uns gepostete Code sollte eigentlich keine solche Fehlermeldung hervorbringen.

Gruß,
Wolff

PS: Das mit der Signatur war IRONISCH gemeint !!!!
Ich wär schon dafür, daß Du erst selber nachdenkst. 8)

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Delphi-sparky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 06.12.02 15:01 
Ok, werd mal sehn ob ich das mit dem Code hinbekomm :P

Interessant müssten eigentlich nur 2 Dinge sein:
- procedure Timer
- procedure Button

ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
     Timer1.Tag := Timer1.Tag + 1;
     Edit2.Text := IntToStr(Timer1.Tag);
end;

Diesen Code hast du mir ja freundlicher Weise mitgeteilt.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
begin
     Timer1.Enabled := true;
     Edit1.Text := IntToStr(StrToIntDef(Edit1.Text, 0) + 1);
     IF StrToIntDef(Edit1.Text, 0) = 50 then MessageBox('Schon 50x geklickt');
end;

Und so lautet der Code für den Button.
Wobei beim start die fehlermeldung kommt: Inkompatible Typen: 'Integer' und 'String'

Das sind die relevanten proceduren, die restlichen komponenten auf meiner form beziehen sich nicht darauf deswegen hab ich diese mal nicht hier aufgeführt.

P.S. Mit der Signatur hab ich nicht persönlich genommen :lol:
Bin ganz froh wenn mir geholfen wird!

_________________
Lieber dumm fragen <-> Als selbst nachdenken | thx for comment @ Wolff68 ;)
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Sa 07.12.02 00:25 
Also ich hab das ganze jetzt mal getestet. Diese 2 Prozeduren bringen bei mir keine solche Fehlermeldung.

Dafür ist mir aufgefallen, daß ich mal wieder die MessageBoxen vertauscht hab. MessageBox('Schon 50x geklickt') ist die falsche. Verwende mal SchowMessage('Schon 50x geklickt').

Nur gibt das bei mir den Fehler: Inkompatible Typen: 'HWND' und 'String' und nicht String und Integer...

Welche Delphi-Version hast Du denn im Einsatz? Vielleicht kennt er ja das StrToIntDef noch nicht ? Ansonsten fällt mir nichts mehr dazu ein.
Ausser, daß der Compiler eigentlich die genaue Stelle markiert, die den Fehler verursacht. Daran solltest Du eigentlich sehen, ob das innerhalb dieser beiden Prozeduren ist.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Delphi-sparky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Sa 07.12.02 01:41 
Herzlichen Dank,
lag ganz allein an der Showmessage...
hätte ich auch selber drauf kommen können,
wobei ich das sogar schon sagte...

Zitat:
und dann etwa bei 50 klicken soll in einer showmessage ein text kommen:
"Sie haben für 50 klicks XX zeit gebraucht"

was solls, danke dir trotzdem :)

-------------------------------------------------------
Jetzt nur noch eins :oops:
Ich wolte ja damals das in der Showmessage nicht nur die Klicks stehen sondern auch die Zeit, wie binde ich die nun mit ein?
Er soll die zeit in die Showmessage einbinden und auch den Timer stoppen.

Zur Zeit läuft der Timer nach der Showmessage weiter, wie stoppe ich den?

_________________
Lieber dumm fragen <-> Als selbst nachdenken | thx for comment @ Wolff68 ;)
Dirk
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 07.12.02 17:01 
Ich würde das der Einfachheit und der Übersicht wegen etwas anders machen:

Erstmal deklarierst du dir zwei globale Variablen unter private:
ausblenden Quelltext
1:
2:
zeit: integer;
klicks: integer;


Dann schreibst du in die OnTimer-Prozedur:
ausblenden Quelltext
1:
2:
inc(zeit); // gleichwertig zu zeit := zeit+1;
Edit1.Text := IntToStr(zeit);


Der Button:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
Timer1.Enabled := true;
inc(klicks); // klicks um 1 erhöhen
if klicks >= 50 then begin
  ShowMessage('Sie haben für 50 Klicks ' + IntToStr(zeit) + 'Sekunden gebraucht');
  Timer1.Enabled := false; // den Timer stoppen
  end;
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 08.12.02 00:13 
@Dirk: Schau doch mal weiter oben...
Wolff68 hat folgendes geschrieben:
Ich hab hier mal die Tag-Eigenschaft genommen. Dann hast die Zahl auch im Timer gespeichert. Geht natürlich auch mit einer globalen Variablen.

Für kleinere Programme mag das mit den Globalen Variablen schon richtig sein. Bei größeren Projekten sind die nicht immer wirklich übersichtlicher. (Und ausserdem 'darf' man den Tag ruhig auch mal nutzen 8) )

Irgendwo hab ich in einem Forum auch schon mal gelesen, daß globale Variablen generell BÄÄÄ seien. (Wobei man aber noch zwischen wirklich globalen Variablen und Typvariablen unterscheiden muß; also die man zB bei der Form unter privat oder public definiert.)
Globale Variable werden glaub auf dem Heap gespeichet, der nicht unendlich viel Platz bietet. Weis aber nicht, ob das noch Gültigkeit hat.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 08.12.02 00:44 
Wobei es bei den nicht lokalen Variablen viele Abstufungen gibt (Siehe überall S: String):

Variante 1:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
type
  TForm1 = class(TForm)
  ...
  end;

var
  Form1: TForm1;
  S: String;

implementation

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  S := 'Hallo';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage( S );
end;


Variante 2:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type
  TForm1 = class(TForm)
  ...
  end;

var
  Form1: TForm1;

implementation

...

var
  S: String;

procedure TForm1.FormCreate(Sender: TObject);
...


und Variante 3:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
type
  TForm1 = class(TForm)
    ...
  private
    { Private-Deklarationen }
    S: String;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  S := 'Hallo';
end;

procedure Hallo;
begin
  ShowMessage( Form1.S );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Hallo;
end;


Wobei, wie man sieht, ist das eigentlich keine richtige globale Variable. Allerdings kann man sie innerhalb der Unit1 als solche verwechseln. Die Variante zwei ist auch keine richtige Globale. Sie ist viel mehr eine private globale Variable.

Und die Sache mit Tag. Die kann man benutzen wie man will.
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 08.12.02 02:20 
Wobei ich Code1 und Code2 als globale Variablen im obigen Sinne meinte.
Code3 ist eine Variable im Typ Form1 die meines Wissens wegen der Speicherung vorzuziehen ist. (Und im übrigen auch von 'aussen', also von anderen Units, zugänglich ist wenn sie im public-Bereich definiert wird)

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
Dirk
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 08.12.02 12:21 
Ich wollte Delphi-sparky doch nur mal ein kurzes und übersichtliches Programm liefern. Wenn er's erst mal verstanden hat, kann er sich ja in die Spaghettiprogrammierung stürzen.

Ich hab' mal gelernt, dass man die lokalen Variablen der Komponenten aus Gründen des Stils nicht zum speichern von Werten benutzen sollte. Man kommt damit relativ schnell durcheinander. Aber das kann ja jeder so machen, wie er will.