AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponenten in der GUI inklusive Ereignisse kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten in der GUI inklusive Ereignisse kopieren

Ein Thema von Poolspieler · begonnen am 25. Feb 2013 · letzter Beitrag vom 18. Mär 2013
Antwort Antwort
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#1

Komponenten in der GUI inklusive Ereignisse kopieren

  Alt 25. Feb 2013, 22:56
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?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.651 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Komponenten in der GUI inklusive Ereignisse kopieren

  Alt 26. Feb 2013, 05:43
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...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Komponenten in der GUI inklusive Ereignisse kopieren

  Alt 26. Feb 2013, 11:42
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 ;-(
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.477 Beiträge
 
Delphi 12 Athens
 
#4

AW: Komponenten in der GUI inklusive Ereignisse kopieren

  Alt 26. Feb 2013, 15:42
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Komponenten in der GUI inklusive Ereignisse kopieren

  Alt 18. Mär 2013, 21:39
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
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 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