Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponenten in der GUI inklusive Ereignisse kopieren (https://www.delphipraxis.net/173456-komponenten-der-gui-inklusive-ereignisse-kopieren.html)

Poolspieler 25. Feb 2013 21:56

Komponenten in der GUI inklusive Ereignisse kopieren
 
Hallo zusammen,
ich habe folgendes Problem unter Delphi XE3:
Im Form1 befindet sich eine Scrollbox mit 100 Objekten (Labels, Buttons, Shapes, etc.)
Jedes dieser Objekte (auch die Labels) hat mehrere Ereignisse.

--> Ich muss nun diese komplette Scrollbox in ein anderes Formular verschieben :(
Frage1: Gibt es eine Möglichkeit, Objekte MIT ihren EREIGNISSEN zu kopieren
Frage2 (fast Offtopic): Gibt es eine Möglichkeit ein Objekt in der IDE INKLUSIVE der Ereignisse zu löschen. --> Im Beispiel unten: Wenn Button1 gelöscht wird, dann bleibt das Button1Click-Ereignis (ungenutzt) stehen. Dies ist besonders ungünstig, wenn man dann irgendwann später einen neuen Button1 auf das Form setzt und diesem ein OnClick Ereignis zuweisen will (mit Doppelclick) --> dieses ist dann bereits mit dem "alten" Code gefüllt.

Beispiel:
Button1 in Form1 auswählen und STRG+C
Dieser Button hat z.B. folgendes OnClick-Ereignis:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('hallo');
end;
Und jetzt:
Form2 auswählen und STRG-V drücken.
Jetzt nehmen wir an, in Form1 existiert bereits ein Button1...
Deshalb heißt dieser Button jetzt z.B. Button2.
Ich würde jetzt einen Freudensprung machen, wenn Delphi für mich automatisch folgendes Ereignis anlegen würde:
Code:
procedure TForm2.Button2Click(Sender: TObject);
begin
  ShowMessage('hallo');
end;
Dass Delphi den Inhalt dieses Ereignisses nicht sinnvoll füllen kann, ist mir klar --> wenn z.B. auf irgendwelche nicht vorhandene/sichtbare Variablen/Objekte zugegriffen wird...

Hat jemand eine Idee, wie man sowas machen kann?

jaenicke 26. Feb 2013 04:43

AW: Komponenten in der GUI inklusive Ereignisse kopieren
 
Direkt automatisch geht das mit Bordmitteln nicht (ob es dafür Addons gibt, weiß ich nicht).

Ich würde die Komponenten der Reihe nach durchgehen, alle Ereignisse durchklicken und ans Ende der Datei verschieben. Dabei auch immer mit Strg + Shift + Pfeil zur Definition im Formular wechseln und auch die verschieben. Dann schneidest du diese Ereignisse alle aus und schiebst sie in das neue Formular, markierst dort den Teil unter implemetation und ersetzt z.B. mit Strg + Shift + J im Synchronedit den Formularnamen.

Nun wechselst du im alten Formular mit Strg + F12 zur Formulardefinitionsdatei, schneidest dort die Scrollbox inkl. aller Unterkomponenten aus und fügst sie im Zielformular an der selben Stelle vor dem end der Zielkomponente ein. Das sollte es gewesen sein...

stahli 26. Feb 2013 10:42

AW: Komponenten in der GUI inklusive Ereignisse kopieren
 
Ich kenne auch keine automatisierte Lösung.

Grundsätzlich ist es bei sehr komplexen Komponentengruppen eine ganz gute Idee, die von vorn herein in einem Frame oder einem Formular zu kapseln.
So ist ein späterer Umzug oder das Kopieren unproblematisch zu bewerkstelligen.

Aber man ist ja dann doch meist erst immer hinterher schlauer ;-(

Uwe Raabe 26. Feb 2013 14:42

AW: Komponenten in der GUI inklusive Ereignisse kopieren
 
Nicht unbedingt elegant, aber es funktioniert:

Nehmen wir mal dein Beispiel mit Button1 in Form1. Markiere den Button im Formular-Designer. Jetzt nicht Strg-C, sondern im Menü "Komponenten - Komponentenvorlage erzeugen". Der Einfachheit halber im folgenden Dialog die Vorgaben übernehmen. In Form2 wechseln. In der Komponenten-Palette in der Kategorie Vorlagen die eben erzeugte Vorlage auswählen und in das Form einfügen. Optional die Vorlage per Kontextmenü wieder löschen.

Funktioniert auch, wenn schon eine Komponente gleichen Namens existiert - die Events werden passend umbenannt.

Poolspieler 18. Mär 2013 20:39

AW: Komponenten in der GUI inklusive Ereignisse kopieren
 
Hallo zusammen,
sorry für die späte Antwort - aber ich habe (basierend auf Euren Antworten) nach der für mich sinnvollsten Lösung gesucht.

Ich habe meine Oberfläche "aufgeräumt" und (ähnlich wie von stahli angedeutet) die vielen einzelnen Komponenten in eine eigene neue Komponente verpackt. Diese wird automatisch beim Prgrammstart (konfigurierbar von einer Textdatei) instanziiert.

Leider habe ich bei der Erstellung der Komponente ein paar Schwierigkeiten. Vielleicht könnte jemand kurz hier hin schauen:
*** Schleichwerbung START ***
http://www.delphipraxis.net/76758-ko...ml#post1207923
*** Schleichwerbung ENDE ***

Ansonsten vielen Dank für Eure Antworten!



Viele Grüße,

Poolspieler


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr.

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