![]() |
feststellen ob geklickt ohne Klick-Prozedur
Hi,
Ich habe 40Panels und will herausfinden, welches geklickt wurde. Natürlich könnte ich für jedes die onClick-Procedur festlegen und dann in eine Variable schreiben ob es geklickt wurde, allerdings wäre das bei der Menge sehr aufwändig. Gibt es eine andere Möglichkeit festzustellen, welche geklickt wurde? (so Ereignisprozedur artig - ich weiß nicht ob der Begriff in Delphi anwendbar ist) |
Re: feststellen ob geklickt ohne Klick-Prozedur
Zitat:
(Designzeit: Panels markieren -> Ereignisse -> OnClick -> Doppelklick) |
Re: feststellen ob geklickt ohne Klick-Prozedur
Und wie finde ich dann raus welches Panel es war das geklickt wurde?
|
Re: feststellen ob geklickt ohne Klick-Prozedur
Zitat:
mfG mirage228 |
Re: feststellen ob geklickt ohne Klick-Prozedur
Im OnClick Event gibt es den Parameter Sender. Dieses Objekt hat den Event ausgelöst.
|
Re: feststellen ob geklickt ohne Klick-Prozedur
Sorry, das ich mich vielleicht so dumm anstelle, aber wie kann ich den Namen des Senders in einer Variable speichern?
|
Re: feststellen ob geklickt ohne Klick-Prozedur
Zitat:
z.B. so
Delphi-Quellcode:
mfG
var
CompName: string; begin if (Sender is TComponent) then CompName := TComponent(Sender).Name else CompName := Sender.Classname; // falls es keine Komponente ist end; mirage228 |
Re: feststellen ob geklickt ohne Klick-Prozedur
Sender : TObject
->
Delphi-Quellcode:
So würde ichs machen
var DeinObject : TObject;
procedure TPanel1.Click(Sender : TObject); begin DeinObject := Sender; end; |
Re: feststellen ob geklickt ohne Klick-Prozedur
Zitat:
[edit]Ups... Doppelpost :duck: [/edit] |
Re: feststellen ob geklickt ohne Klick-Prozedur
Zitat:
Wenn man wieder das Panel haben will, muss man halt ![]() mfG mirage228 |
Re: feststellen ob geklickt ohne Klick-Prozedur
Ok ich nehm alles zurück :oops:
|
Re: feststellen ob geklickt ohne Klick-Prozedur
Aber ich brauch doch für find Component erst mal das Sufix des Panels oder nicht?
Ach ich erklär einfach alles: Also jedes der PAnel hat eine andere Farbe, jetzt will ich rausfinden, welche Farbe das geklickte Panel hat. Allerdings eben nicht für jedes PAnel eine neue Procedure. Leider hat ein Panel ja kein Canvas, deshalb geht Panel1.Canvas.pixels[x,y] ja nicht. Allerdings will ich auch kein Bild nehmen und ein Grid ist mir zu aufwendig. |
Re: feststellen ob geklickt ohne Klick-Prozedur
Zitat:
dann würde ich folgendes machem. Im private oder public Bereich Deines Forms (je nach dem, wo du es brauchst) erstellst Du eine Variable vom Typ ![]() (In dem Beispiel nenne ich die Variable mal "MyColorVar") Dein Panel kennt ja die Eigenschaft Color, also dürfte das ganz passend sein. In die OnClick-Methode, die Du jedem Panel zuweist, schreibst du Folgendes:
Delphi-Quellcode:
mfG
begin
if (Sender is TPanel) then MyColorVar := TPanel(Sender).Color; end; mirage228 |
Re: feststellen ob geklickt ohne Klick-Prozedur
Hab vielen Dank, klappt perfekt!
Noch eine Frage, die if Abfrage ist doch eigentlich überflüßig, da die Procdur ja nur bei einem Panel-Klick ausgeführt wird, oder? Und was ich nicht verstehe, wenn der Sender TPanel ist (dann steht ja in "Sender" nur TPanel oder nicht?), warum erkennt der dann mit TPanel(Sender).Color; die Nummer des PAnels? Anubis, besser gleich richtig fragen.... |
Re: feststellen ob geklickt ohne Klick-Prozedur
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:
So ein Problem lößt man am schnellsten mit einem TPanel-Dummy. Hier kommt der Dummy:
Delphi-Quellcode:
Das ist erstmal alles!
Type
TPanelCanvas = class(TPlanel) public property Canvas; end; Jetzt kannst Du in dem OnMouseUpEventhandler folgendes schreiben
Delphi-Quellcode:
Wie man sieht, wird nie eine Instanz der TPanelCanvas erzeugt, sondern das Ding
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin If Sender is TPanel then TPanelCanvas(Sender).Canvas.Pixels[X,Y]:=clRed; end; wird nur für einen Typecast verwendet. In der Anlage ist ein kleines Beispiel |
Re: feststellen ob geklickt ohne Klick-Prozedur
er erkennt keien nummer sonder die farbe *G* in sender steht der name drin von wo aus die procedure aufgerufen wurden ist und jetzt kann man mit sender is TPannel prüfen ob es ein TPannel überhaupt ist, ist es nur eine sicherheitsabrfage.
|
Re: feststellen ob geklickt ohne Klick-Prozedur
Danke für deine Antwort, Jens!
Ist wirklich nützlich zu wissen, dass es möglich ist, auf ein Panel zu zeichnen. Gibt es denn noch mehr Objekte mit einem versteckten Canvas? Wie finde ich das raus? [hoffe das geht nicht zu sehr ins OT...] Zitat:
|
Re: feststellen ob geklickt ohne Klick-Prozedur
Zitat:
|
Re: feststellen ob geklickt ohne Klick-Prozedur
Zitat:
Alle Nachfahren von TCustomControl und TGraphicControl haben die Canvas property. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz