Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi onClick + onDoubleClick (https://www.delphipraxis.net/140926-onclick-ondoubleclick.html)

yasR 29. Sep 2009 06:36


onClick + onDoubleClick
 
Hallo ihr Lieben,
habe mal wieder zwei Fragen an euch, die ihr mir hoffentlich genauso kopentent beantworten könnt, wie meine letzten Fragen. ^^
Habe jetzt nur die erste, für mich auch wichtigere Frage im Header verwendet, aber trotzdem solltet ihr mir auch Frage 2 beantworten können.

1. Ich habe meinem Button ein onClick zugewiesen, die procedure zu onClick steht wie üblich im Quellcode.
Es kommt aber öfters vor, dass man auf einen Button zweimal klickt und er dann trotz onClick nichts auslöst.
Dieses Problem möchte ich mit onDoubleClick vermeiden. Also möchte ich einer Procedure im Quellcode ein onClick und OnDoubleClick geben.
Da die Anzahl meiner Buttons jetzt nicht gerade wenig sind, müsste ich nach meiner Variante den gleichen Inhalt wie bei der onClick procedure nehmen
und dann wieder eine neue procedure mit onDoubleClick machen. Durch die hohe Anzahl der Buttons, suche ich nach einer schöneren Lösung.


2. Ich habe eine procedure oder Funktion erstellt, die ich jetzt für mehreren Buttons verwenden möchte.
(Bsp machdies(button1),machdies (button2), machdies (Button3)... ). Wie bei Frage eins schon erwähnt, habe ich besonderst
viele Buttons, deshalb suche ich auch hier nach einer edleren Methode.

Viele Grüße
yasR

mkinzler 29. Sep 2009 06:39

Re: onClick + onDoubleClick
 
Du kannst der Eventproperty sogar die selbe Methode zuweisen

hoika 29. Sep 2009 06:55

Re: onClick + onDoubleClick
 
Hallo,

1. Ein Button hat kein OnDblClick-Event.
2. siehe mkinzler
das OnClick im Objekt-Inspector ist eine ComboBox
einfach mal aufklappen und bei Button2 z.B. Button1Click auswählen
kein Doppelklick !

Noch zu 1.
Um doppelten Code zu vermeiden.

Delphi-Quellcode:
procedure TForm1.ActOnClick;
begin
 // viel schicker Code
end;

procedure TForm1.Button1Click;
begin
  ActOnClick;
end;

procedure TForm1.Button2Click;
begin
  ActOnClick;
end;
Und eleganter

Delphi-Quellcode:
procedure TForm1.ActOnClick(Sender: TObject);
begin
 // viel schicker Code
end;
und ActOnClick über den Objekt-Inspektor zuweisen.

ActOnClick ist eine von dir definierte Methode.



Heiko

himitsu 29. Sep 2009 08:01

Re: onClick + onDoubleClick
 
Zitat:

Delphi-Quellcode:
procedure TForm1.ActOnClick;
begin
// viel schicker Code
end;

procedure TForm1.Button1Click;
begin
  ActOnClick;
end;

procedure TForm1.Button2Click;
begin
  ActOnClick;
end;

wenn schon, dann so, wie mkinzler schon sagte.
eine Prozedur für Alle und diese im IO jeder der Komponenten zuweisen
und in der Prozedur kann man über den Sender rausbekommen, von welcher Komponente diese Ereignisprozedur aufgerufen wurde, bzw. welche Komponente den Aufruf abgesendet hat.
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  if Sender = Button1 then begin
    ...
  end else if Sender = Button2 then begin
    ...

    ...
  end;
end;

mkinzler 29. Sep 2009 08:52

Re: onClick + onDoubleClick
 
Ich würde den Buttons verschiedene Tags verpassen, dann kann man mit

Delphi-Quellcode:
case Sender.Tag of
...
unterscheiden

Sir Rufo 29. Sep 2009 08:56

Re: onClick + onDoubleClick
 
Wäre hier nicht eine ActionList besser angebracht ("ich habe hier viele Buttons"), und diese Actions dann den Buttons zuweisen?

Dann wäre auch die Möglichkeit gegeben, davon schnell eine Menüleiste oder ein Popup-Menü zu bauen.

cu

Oliver

TeronG 29. Sep 2009 10:09

Re: onClick + onDoubleClick
 
Zitat:

Zitat von mkinzler
Ich würde den Buttons verschiedene Tags verpassen, dann kann man mit

TAG finde ich gut weil ich CASE lieber mag als END ELSE IF's.
BTW @himitsu: Ist da absichtlich kein ELSE bei deinem Code?

Aber da muss man dann halt wirklich gut aufpassen, dass man die TAG's auf fein pflegt und so ...

Daher würde ich eher zu der Version von himitsu oder Sir Rufo greifen.

Und wie viele sind denn "besonderst viele Buttons" so ungefähr!? (nur grobe Hausnummer)

EDIT:
Man beachte auch:
Zitat:

Zitat von mkinzler
Du kannst der Eventproperty sogar die selbe Methode zuweisen

Im OI und auch "automatisiert" zur laufzeit. (z.B. btn.dblClick := btnClick)

yasR 29. Sep 2009 18:49

Re: onClick + onDoubleClick
 
Hey, danke für die reichlichen Lösungen, aber kann da leider keine Lösung für mein Problem finden. ^^
PS: Habe mich jetzt für Panels entschieden, da Button ja keine DblClick Event besitzt.

Jedes Panel soll mit der Eigenschaft onClick und DblClick die selbe procedure aufrufen, die einfachste Lösung ist bestimmt diese:
Ich suche allerdings nach etwas besserem ;-)

Delphi-Quellcode:

procedure TForm1.Panel1Click(Sender: TObject);
begin

end;

procedure TForm1.Panel1DblClick(Sender: TObject);
begin

end;

procedure TForm1.Panel2Click(Sender: TObject);
begin

end;

procedure TForm1.Panel2DblClick(Sender: TObject);
begin

end;

procedure TForm1.Panel3Click(Sender: TObject);
begin

end;

procedure TForm1.Panel3DblClick(Sender: TObject);
begin

end;


// ..und noch weitere Panels

end.

DeddyH 29. Sep 2009 18:52

Re: onClick + onDoubleClick
 
Du schreibst die Routine genau einmal, wobei Du nicht auf das konkrete Panel, sondern den Sender zugreifst. Diese Routine weist Du dann im OI allen Panels im OnClick und OnDblClick zu... fertig.

yasR 29. Sep 2009 18:58

Re: onClick + onDoubleClick
 
Hmm.. nach deiner Lösung,wäre aber die Procedure von Panel2 und Panel3 die selbe, oder nicht?

Delphi-Quellcode:
procedure TForm1.Panel2Click(Sender: TObject);
begin

end;

procedure TForm1.Panel2DblClick(Sender: TObject);
begin

end;

procedure TForm1.Panel3Click(Sender: TObject);
begin

end;

procedure TForm1.Panel3DblClick(Sender: TObject);
begin

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.
Seite 1 von 2  1 2      

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