Autor Beitrag
Grafix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: 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:
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Datenbanken verschoben am Do 30.04.2009 um 17:31
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 30.04.09 17:35 
Moin!

user profile iconGrafix hat folgendes geschrieben Zum zitierten Posting springen:
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: Suche in: Delphi-Forum, Delphi-Library BUTTON DYNAMISCH ONCLICK :les: :think: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 270

WIN XP Professional
Delphi 7 Enterprise, Java (Eclipse), Python 2.5, Django 1.1
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 30.04.09 20:29 
Die Beiträge aus der oben angegebenen Suche hast du dir offensichtlich nicht angeschaut... :roll:
Es reicht ja eine OnClick-Prozedur...
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 30.04.09 20:39 
user profile iconGrafix hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Do 30.04.09 20:41 
user profile iconpassiv hat folgendes geschrieben Zum zitierten Posting springen:
@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.

Du kannst auch gerne das OnClick auf die Prozedur linken :roll:

_________________
Die Lösung ist nicht siebzehn.
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.05.09 18:38 
Aber Tag weist du zu? Wie sieht der Quelltext denn aus?
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 03.05.09 18:42 
ausblenden 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 user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 03.05.09 19:00 
geeeenau, ich glaube ich entscheide mich für die string list^^

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

aber wie kann ich die StringList denn Prozedurübergreifend schreiben?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.05.09 19:47 
Deklariere die unter private oben im Formular. ;-)
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 03.05.09 19:49 
klappt, ich lerne dazu =)
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 04.05.09 11:38 
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 04.05.09 12:34 
Ja, sicher, sowas ist schon sehr interessant, aber da im Profil eine antikere Version steht... ;-)