Autor Beitrag
DelphMan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Fr 01.07.05 20:14 
Hallo,


ich erzeuge in einem Delphi-Projekt mehrere TPanels in Form
kleiner Kästchen (vgl. Lotto-Kästchen) dynamisch zur Laufzeit
in einem TPanel-"Array". Jedem weise ich ein und dieselbe (!!!)
OnClick-Funktion zu, die aufgerufen wird, wenn man eines der
TPanels anklickt, denn sonst werden es zuviele einzelne Funktionen.

Nun die Frage:

Wie kann ich erkennen, welches TPanel ich mit der Maus geklickt
habe. Um Variablen kann man die PanelClick-Funktion nicht erweitern,
da Delphi dann meckert, es sei plötzlich eine Prozedur.

In der Funktion steht ja immer ein (Sender: TObject). Kann man
irgendwie da herausbekommen wie das geklickte TPanel oder eine
seinder Eigenschaften hieß, z.B. den Hint, den ich hochnummeriere
und so identifiizieren könnte, welches ich denn geklickt habe?

Zur Veranschaulichung: Es werden z.B. 49 Panels angelegt und weil
das ja recht viele sind, will ich alle dynamisch zur Laufzeit
generieren - klappt auch. Und jedem Panel.Onclick weise ich die
PanelClick Funktion zu. Jetzt müßte ich nur noch herausbekommen,
welches konkrete Panel ich denn eben zufällig angeklickt habe.
Am elegantesten wäre ja ein Parameter, der mir aber nicht gestattet
ist, weil man wohl OnClickEvents nichts neues Dazugeben darf.

Weiß jemand Rat?


Danke!

DelphMan
blaueled
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 133

Win XP
D5
BeitragVerfasst: Fr 01.07.05 20:42 
Ich würde den umweg über die Maus gehen.
Wenn du guckst, wo die Maus ist, kannst du herausfinden, welcher button geklickt
wurde. Das geht dann glaube ich mit GetCursorPos oder so.

Arne
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Fr 01.07.05 21:16 
Titel: Re: Dynamisch erzeugtes TPanel --> Welches wurde geklickt
user profile iconDelphMan hat folgendes geschrieben:
In der Funktion steht ja immer ein (Sender: TObject). Kann man
irgendwie da herausbekommen wie das geklickte TPanel oder eine
seinder Eigenschaften hieß, z.B. den Hint, den ich hochnummeriere
und so identifiizieren könnte, welches ich denn geklickt habe?


Genau das ist der richtige Weg. Probier mal den Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.PanelsOnClick(Sender: TObject);
var
  ClickedPanel  : TPanel;
begin
  if not (Sender is TPanel) then
    exit;
  ClickedPanel := TPanel(Sender);

  // nu kannst du z.B auf ClickedPanel.Hint zugreifen...
end;



MrSaint


// edit: klammern im Code hinzugefügt...

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
blaueled
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 133

Win XP
D5
BeitragVerfasst: Fr 01.07.05 21:23 
Ist wohl besser ...
DelphMan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Fr 01.07.05 21:36 
Wow, Suuuper! Es klappt! Und so einfach!

Vielen vielen Dank!!!
Manuell
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 02.07.05 17:55 
Geht auch kürzer:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.PanelsOnClick(Sender: TObject);  
begin  

 TPanel(Sender).Hint := 'blabla';  //Beispiel

end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Sa 02.07.05 18:24 
@Manuell: da bekommst du aber ein Problem, wenn der Sender einmal kein TPanel sein sollte..

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Manuell
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 02.07.05 19:35 
user profile iconMrSaint hat folgendes geschrieben:
@Manuell: da bekommst du aber ein Problem, wenn der Sender einmal kein TPanel sein sollte..


Ja ok, hauptsächlich wollte ich darauf hinaus dass man nicht zwingend eine zusätzliche Variable deklarieren muss um auf Sender zuzugreifen. Der Test ob es wirklich ein TPanel dachte ich entfällt, da er die Prozedur ja hoffentlich nur bei Panel-Ereignissen eingetragen hat.