Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einfache Frage zu einer Schleife (https://www.delphipraxis.net/38524-einfache-frage-zu-einer-schleife.html)

sniffy 20. Jan 2005 13:54


Einfache Frage zu einer Schleife
 
Jo.
Hab eingetlich ne ganz billige Frage. Ich hab ein Button auf meiner Form. Ich würde gerne wenn ich das zweite Mal hintereinander auf den Button klicke, das ne Meldung kommt. (ShowMessage)
z.B. 'Du hast schon gedrückt' usw.

Danke!

jfheins 20. Jan 2005 13:59

Re: Einfache Frage zu einer Schleife
 
Schau dir mal TButton.Enabled, wenn du möchtest, dass man den nur einmal drücken kann.

Sonst:
Delphi-Quellcode:
if TButton.Tag = 1 then Beep
else TButton.Tag := 1; // usw.

xman 20. Jan 2005 14:00

Re: Einfache Frage zu einer Schleife
 
Delphi-Quellcode:
var FPressed:Boolean=False;



Button1.OnClick

if fPressed then
showmessage('xxxxx');

fPressed:=True;

malo 20. Jan 2005 14:00

Re: Einfache Frage zu einer Schleife
 
Zitat:

Zitat von sniffy
Jo.
Hab eingetlich ne ganz billige Frage.

Sowas gibts nicht :zwinker:

Zitat:

Zitat von sniffy
Ich hab ein Button auf meiner Form. Ich würde gerne wenn ich das zweite Mal hintereinander auf den Button klicke, das ne Meldung kommt. (ShowMessage)
z.B. 'Du hast schon gedrückt' usw.

Danke!

Erstell doch eine Variable in deinem OnClick-Ereignes, die beim OnClick auf true gesetzt wird , also so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var KLick: boolean;
begin
 if Klick = true then
   ShowMessage('schon geklickt!');
 Klick := true;
end;

Steve 20. Jan 2005 14:01

Re: Einfache Frage zu einer Schleife
 
Hi,

das hat nix mit ner Schleife zu tun ;)

Gib Deinem TForm im private-Abschnitt ne Variable (boolean, Byte, was auch immer *g* - was für Deine Zwecke halt benötigt wird) und setze diese im FormCreate auf False, 0 was auch immer :D
Beim Click auf den Button prüfst Du diese Variable (false, 0 ...), änderst sie (auf true, hochzählen..) Somit erkennst Du beim zweiten Click, dass sie nicht mehr im Ausgangszustand (false/0...) ist und kannst darauf reagieren.


edit: Warum tipp ich immer so viel nd bin dadurch so lahm... :?
Gruß
Stephan :dance:

Steve 20. Jan 2005 14:03

Re: Einfache Frage zu einer Schleife
 
Zitat:

Zitat von malo
Erstell doch eine Variable in deinem OnClick-Ereignes, die beim OnClick auf true gesetzt wird , also so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var KLick: boolean;
begin
 if Klick = true then
   ShowMessage('schon geklickt!');
 Klick := true;
end;

Wenn die Variable lokal ist, geht die Änderung verloren.

Gruß
Stephan :dance:

Aenogym 20. Jan 2005 14:03

Re: Einfache Frage zu einer Schleife
 
hi,

ist wirklich ganz einfach ;)
du musst nur eine variable deklarieren, die speichert, ob schon geklickt wurde. möglichst nicht global, das thema hatten wir hier ja schon oft.

also:

Delphi-Quellcode:
//uses usw.
type
  TForm1 = class(TForm)
    //...
  private
    gedrueckt: boolean;
  end;

//...

procedure TForm1.FormCreate(Sender: TObject);
begin
  gedrueckt := false;  //bin mir jetzt nicht sicher, ob die variable automatisch false ist
end;

procedure TForm1.Button1Click(Sender: TOJbect);
begin
  if gedrueckt then
    showmessage('Du hast schon gedrückt')
  else
    //dein code
end;
Aenogym

toms 20. Jan 2005 14:04

Re: Einfache Frage zu einer Schleife
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
{$j+} bClicked: Boolean = False;{$j-}
begin
  if bClicked then
   ShowMessage('Du hast schon geklickt')
  else
   bClicked := True;
end;

malo 20. Jan 2005 14:08

Re: Einfache Frage zu einer Schleife
 
Zitat:

Zitat von toms
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
{$j+} bClicked: Boolean = False;{$j-}
begin
  if bClicked then
   ShowMessage('Du hast schon geklickt')
  else
   bClicked := True;
end;

So gehts nicht, da man Konstanten nicht ändern kann ;)

@Steve: ich dachte, die Variable wird im ganzen Event beibehalten (also auch beim 2. und 3. mal aufrufen) :gruebel:

freak4fun 20. Jan 2005 14:09

Re: Einfache Frage zu einer Schleife
 
ALso ich finde die Idee mit dem Tag am besten. :zwinker:

*Meine Antwort gelöscht hab weil schon so viele vor mir gepostet haben* :|

mfg
freak

Aenogym 20. Jan 2005 14:10

Re: Einfache Frage zu einer Schleife
 
@malo: geht doch. denn der compiler schalter {$j+} aktiviert, dass man typisierte konstanten ändern kann. ist eigentlich nur noch zur abwärtskompatibilität drin, da fürher alle konstanten variabel waren...

Aenogym

malo 20. Jan 2005 14:12

Re: Einfache Frage zu einer Schleife
 
Zitat:

Zitat von Aenogym
@malo: geht doch. denn der compiler schalter {$j+} aktiviert, dass man typisierte konstanten ändern kann. ist eigentlich nur noch zur abwärtskompatibilität drin, da fürher alle konstanten variabel waren...

Aenogym

Aber das $j+ ist doch auskommentiert, mit den { }, und Kommentare werden doch nicht beachtet, oder? :gruebel:

//edit: oder hab ich da was GANZ falsch verstanden? :wall:

Steve 20. Jan 2005 14:13

Re: Einfache Frage zu einer Schleife
 
Zitat:

Zitat von malo
Aber das $j+ ist doch auskommentiert, mit den { }, und Kommentare werden doch nicht beachtet, oder? :gruebel:

Compiler-Direktiven haben die Notation {$xyz}

Gruß
Stephan :dance:

ReDoX 20. Jan 2005 14:14

Re: Einfache Frage zu einer Schleife
 
Ja aber da {$} ein $ zeichen vorsteht werden sie doch beachtet.
Mfg MrScholz

Steve 20. Jan 2005 14:16

Re: Einfache Frage zu einer Schleife
 
Zitat:

Zitat von malo
@Steve: ich dachte, die Variable wird im ganzen Event beibehalten (also auch beim 2. und 3. mal aufrufen) :gruebel:

Nein. Versuch mal folgendes:
Delphi-Quellcode:
procedure TForm1.FormClick(Sender: TObject);
var
  i : byte;
begin
  ShowMessage(inttostr(i));
  inc(i);
end;
:zwinker:

Gruß
Stephan :dance:

malo 20. Jan 2005 14:19

Re: Einfache Frage zu einer Schleife
 
Mit solchen Gemeinheiten geht mir Delphi aber tierisch auf den Keks :wall:

Naja, wieder was gelernt :)

Kann mir vielleicht mal jemand ein Tutorial o.Ä. zu diesen {$...}-Sachen geben? Weil ich die irgendwie nich wirklich kapiere :wall:

sniffy 20. Jan 2005 14:27

Re: Einfache Frage zu einer Schleife
 
Vielen, vielen Dank Leute!
Ich bin begeistert von eurer Hilfsbereitschaft!
:spin: :spin: :spin:

Aenogym 20. Jan 2005 14:28

Re: Einfache Frage zu einer Schleife
 
malo,

diese {$...} sachen nennen sich "compiler-anweisungen". einfach mal die hilfe nachschlagen dazu ;)
außerdem kanst du sie nicht mit kommentaren verwechseln, da delphi die (standardmäßig) anders hervorhebt. bei mir sind kommentare blau und compiler-direktiven grün :)

compiler-direktiven sind dazu da, um dem compiler anweisungen zu geben, wie er sich verhalten soll. so kannst du zum beispiel kurzzeitig die "hinweise" für bestimmte code-zeilen abschalten, die beim compilieren manchmla unter dem code fenster erscheinen. in der hlfe hast du eine komplette liste mit allen direktiven und was diese tun.

Aenogym

Steve 20. Jan 2005 14:30

Re: Einfache Frage zu einer Schleife
 
Hi,

zum Thema {$abc} liefert die Delphi-Hilfe was unter dem Stichpunkt Delphi-Referenz durchsuchenDelphi Compiler-Optionen bzw. Delphi-Referenz durchsuchenCompiler (Registerkarte) - Optionen

Gruß
Stephan :dance:

Steve 20. Jan 2005 14:31

Re: Einfache Frage zu einer Schleife
 
Zitat:

Zitat von Aenogym
außerdem kanst du sie nicht mit kommentaren verwechseln, da delphi die (standardmäßig) anders hervorhebt.

Hi,

das gilt erst ab Delphi 6 oder 7. Bei Delphi 5 werden sie bei der Hervorhebung nicht unterschieden ;)

Gruß
Stephan :dance:

malo 20. Jan 2005 16:03

Re: Einfache Frage zu einer Schleife
 
Zitat:

Zitat von Steve
Zitat:

Zitat von Aenogym
außerdem kanst du sie nicht mit kommentaren verwechseln, da delphi die (standardmäßig) anders hervorhebt.

Hi,

das gilt erst ab Delphi 6 oder 7. Bei Delphi 5 werden sie bei der Hervorhebung nicht unterschieden ;)

Gruß
Stephan :dance:

... und außerdem hab ich ja auf das DP-Highlighting geguckt, da sind die blau ge-highlightet :wall:

Trotzdem danke nochmal, ich frag die bekannte OH nochmal danach :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz