Autor |
Beitrag |
Grafix
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: Do 30.04.09 17:25
Hey,
ich weiß, dass es solche Themen schon gibt, jedoch nicht SO:
Ich erstelle X Panels zur Laufzeit. Allen weise ich einen spezifischen Namen zu:
Delphi-Quelltext 1:
| Panel.Name := 'Panel' + IntToStr(i); |
Nun möchte ich, dass bei MouseOver über jedes eigene Panel etwas jeweils verschiedenes passiert.
Also kann ich prozeduren per Laufzeit erstellen?
Danke
Moderiert von Narses: Delphi-Tags hinzugefügtModeriert von Narses: Topic aus Datenbanken verschoben am Do 30.04.2009 um 17:31
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 30.04.09 17:35
Moin!
Grafix hat folgendes geschrieben : | ich weiß, dass es solche Themen schon gibt, jedoch nicht SO:
Ich erstelle X Panels zur Laufzeit. Allen weise ich einen spezifischen Namen zu: |
Ob das nun Panels oder Buttons sind, ist relativ egal; das Konzept bzw. das Vorgehen ist das gleiche: BUTTON DYNAMISCH ONCLICK
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Do 30.04.09 17:38
Hi!
Du könntest beim OnMouseOver den Sender (bzw. das i) abfragen und dann in einer Procedure aufrufen. Also
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| OnMouseOver(Sender: TObject); begin Proc(Sender); end;
Proc(Sender:Tobject); begin if Sender.Name = '..' then ..... else if ... end; |
_________________ Die Lösung ist nicht siebzehn.
|
|
passiv
      
Beiträge: 270
WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
|
Verfasst: Do 30.04.09 17:50
@Mitmischer: wofür braucht man da bitte 2 Prozeduren? Und warum dann nicht einfach so wie von Narses vorgeschlagen mit dynamischem OnClick? Da spart man sich eine Menge Schreibarbeit und auch einige Vergleiche. Vor allem bei Strings ist da einiges an Zeit zu holen.
_________________ Die Probleme, die es in der Welt gibt, sind nicht mit der gleichen Denkweise zu lösen, die sie erzeugt hat.
Albert Einstein
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: Do 30.04.09 20:19
Mhm ok, jetzt weiß ich, wie ich dem Panel ein Onclick eriegnis zuweise. Das Problem ist aber, dass ich ja nicht nur ein Panel dynamisch erzeuge sonder X. Das heißt, ich weiß nicht, wie viele procedures ich brauche.
Gedacht hab ich mirs so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure anzeigen; begin <erzeuge X Panels> for k := 1 to i do begin procedure Panel + i + .onclick(Sender: TObject); begin <rufe Daten aus Datenbank ab> end; end; end; |
(Hab den Code gerade aus dem Kopf geschrieben --> wahrscheinlich Syntax-Fehler)
Aber eine procedure in einer procedure geht offensichtlich nicht... Ne Idee wie ich sowas hinbekommen kann???
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 30.04.09 20:29
Die Beiträge aus der oben angegebenen Suche hast du dir offensichtlich nicht angeschaut...
Es reicht ja eine OnClick-Prozedur... Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TFormX.PanelXClick(Sender: TObject); begin if Sender is TPanel then ShowMessage(IntToStr(TPanel(Sender).Tag)); end;
procedure TFormX.CreateAllPanels; var MyPanel: TPanel; begin for i := 0 to 9 do begin MyPanel := TPanel.Create(Self); MyPanel.Top ... MyPanel.Parent := Self;
MyPanel.OnClick := PanelXClick; end; end; |
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: Do 30.04.09 20:32
Mhm doch, ich habe sie mir angeschaut, aber offensichtlich nicht verstanden... Ich werde mal deine Lösung ausprobieren... vll sollte ich mal eine Pause machen, blick gerade gar nicht mehr durch^^ Trotzdem danke dass dus nochmal extra rausgeschrieben hast.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 30.04.09 20:39
Grafix hat folgendes geschrieben : | Trotzdem danke dass dus nochmal extra rausgeschrieben hast. |
Das habe ich jetzt kurz aus dem Kopf getippt, ich gehe einfach einmal davon aus, dass bei den Suchergebnissen ähnlicher Code zu finden ist.
Ich glaube es gab sogar welchen in der Library.
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Do 30.04.09 20:41
_________________ Die Lösung ist nicht siebzehn.
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: So 03.05.09 18:36
hm, aber jetzt zeigt er mir immer nur eine 0 wenn ich auf die Panel klicke.. immerhin funktioniert schon mal die onklick prozedur bei ALLEN Panels.
Mit dem TPanel(Sender).Tag sollte man ja herausfinden, welches Element den onklick ausgelöst hat oder?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 03.05.09 18:38
Aber Tag weist du zu? Wie sieht der Quelltext denn aus?
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: So 03.05.09 18:42
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| Panel := TPanel.Create(self); Panel.Parent := SBInhalt; Panel.Top := top; Panel.Left := 5; Panel.Name := 'Panel' + IntToStr(i); Panel.OnClick := PanelXClick; |
--- Moderiert von Narses: Beiträge zusammengefasst---
achso, wusste nicht dass man das zuordnen muss. Alles klar, jetzt funktioniert es.
Gibt es auch eine möglichkeit statt integers Strings zu übermitteln?
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: So 03.05.09 18:50
Du kannst dir zB eine TStringList anlegen, die Strings dadrinne speichern und dann Tag als Index benutzen.
Oder: Du holst dir per AllocMem Speicher in passender Größe, packst den String darein, castest den Pointer nach Integer und schreibst ihn in Tag.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: So 03.05.09 19:00
geeeenau, ich glaube ich entscheide mich für die string list^^
--- Moderiert von Narses: Beiträge zusammengefasst---
aber wie kann ich die StringList denn Prozedurübergreifend schreiben?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 03.05.09 19:47
Deklariere die unter private oben im Formular. 
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: So 03.05.09 19:49
klappt, ich lerne dazu =)
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: So 03.05.09 21:02
Der Punkt "Prozeduren zur Laufzeit erstellen" interessiert mich auch.
Ich wüsste nicht, wie man das kann.
Ich weiß nur, dass man ja einem OnClick-Ereignis per Zufall eine bestehende Prozedur zuweisen kann, mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| randomize; i:=random(hoechsterWert); case i of 0: machDiesesProcedure(); 1: machJenesProcedure(); 2: machNochWasAnderesProcedure(); end; |
...und so weiter, bis zum höchsten Wert (also hoesterWert-1 meine ich natürlich).
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 03.05.09 21:26
Es gibt auch Beispiele wie tatsächlich Code manuell erzeugt und ausgeführt wird, aber das ist allgemein nicht sinnvoll nutzbar.
An der Stelle sind vielleicht Skripte interessant:
www.remobjects.com/ps
Die Frage ist aber immer noch die nach dem Anwendungszweck.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 04.05.09 11:38
ffgorcky hat folgendes geschrieben : | Der Punkt "Prozeduren zur Laufzeit erstellen" interessiert mich auch.
Ich wüsste nicht, wie man das kann. |
Dem Code hier kommst du mit den anonymen Methoden von D2009 ziemlich nahe. Dank Closures kann man damit evtl. auf solche Verrenkungen wie Tag + TStringList verzichten.
_________________ >λ=
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 04.05.09 12:34
Ja, sicher, sowas ist schon sehr interessant, aber da im Profil eine antikere Version steht... 
|
|