AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

Ein Thema von torud · begonnen am 17. Jan 2013 · letzter Beitrag vom 17. Jan 2013
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 11:39
Hallo Wissende,

ich habe testhalber ein Delphi-Package erstellt, welches auch ein Formular enthält. Dieses soll auf dem Panel erzeugt und (auch schon zur Designtime) angezeigt werden.

Mit dem Folgenden Code wird das Formular zwar auf der Komponente erzeugt, aber sichtbar wird diese nur, wenn ich die Anwendung kompiliere.
Ich möchte allerdings schon zur Designtime sehen, was los ist. Was mache ich falsch?

Delphi-Quellcode:
constructor TLeagueSports.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  self.Parent := AOwner as TWinControl;

  FAppPath := IncludeTrailingBackslash(ExtractFileDir(Application.ExeName));
  FXmlFile := '';

  Self.BorderStyle := bsNone;
  Self.BevelInner := bvNone;
  Self.BevelOuter := bvNone;
  Self.Caption := ' ';
  Self.Height := 177;
  Self.Width := 550;

  //das hier ist das formular, welches ich nur sehe, wenn ich das Programm, wo ich die Komponente platziert habe erzeuge
  fLoadMatch := TLoadMatch.Create(self);
  fLoadMatch.Parent := self;
  fLoadMatch.Visible := True;
  fLoadMatch.BorderStyle := bsNone;
  fLoadMatch.Align := alClient
end;
Danke
Tom
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 11:46
HI,

ist zwar keine Antwort auf deine Frage, aber warum zum Geier nimmst Du nicht ein TFrame, das u.a. für diesen Zweck da ist?

Grüße
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 12:35
Hallo Lemmy,

ich nehme deinen Post direkt als Antwort auf und werde mal zum Geier testen, ob´s damit gehen wird.

Perfekt. Damit gehts. Ich wusste nicht, dass die Frames auch extra dafür da sind.
Danke
Tom

Geändert von torud (17. Jan 2013 um 12:39 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 12:48
sehr gut.

Und nochmal: Auch wenn das nicht zu deiner Frage gehört:

Ich persönlich würde das NICHT machen, sondern erst zur Laufzeit anzeigen.

Zumindest bisher habe ich Frames so verwendet, dass ich dort (wie bei OOP üblich) einen entsprechenden Dialog incl. Logik/Anbindung implementiert habe, die ich an div. Stellen in der Software eingesetzt habe.

Verbindest Du das Frame zur Designzeit mit einem Formular, dann werden zum einen Änderungen am Basisframe (wenn ich mich richtig erinnere) nicht übernommen, sowie Änderungen am eingebundenen Frame nicht an die Basis zurück gegeben (was ja auch Sinn macht).

Mag sein, dass es dafür Anwendungsfälle gibt - aber bitte beachte den Punkt, bevor du damit loslegst...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 12:58
[trotz rotem Kasten mal noch meine Überlegungen dazu...]

Ich wüsste jetzt nicht, warum das mit einem Formular eigentlich nicht zur Designtime funktionieren sollte (wobei man überlegen sollte ob es wirklich notwendig ist).

Formulare und Frames haben beide Vor- und Nachteile. M.E. spricht nicht unbedingt etwas geben Formulare.

Als dritte Variante gibt es auch noch "embedded Forms", bei denen der Rahmen dann nicht sichtbar ist.
Oder man kann (wie es bei Firemonkey gemacht wird) den Formularinhalt in ein Panel setzen und das Panel auf einen anderen Parent verschieben.


So richtig erschließt sich mir nicht, warum Du eine Komponente baust und dort (auch schon zur Designtime) ein Formular drauf setzt.

Hast Du die Komponente nach der Formularintegration neu in der IDE installiert? Unter älteren Delphi-Versionen war das (glaube ich) noch etwas umständlicher. Wenn Du zunächst eine Komponente ohne Formular installiert hattest, dann reicht es nicht, den Quellcode zu erweitern da die IDE immer noch die ältere Komponentenversion benutzt.
Nur zur Laufzeit würde dann eine aktualisierte Version verwendet.

Ich würde mal testweise einen Button auf die Komponente setzen. Wenn der zur Designtime angezeigt wird, ist die Komponente korrekt in der IDE installiert.


Besonderes Augenmerk muss man bei solchen Konstellationen darauf legen, dass man sich keine Abhängigkeiten zwischen Packages einhandelt.
Das hatte ich mal unter D 2009 in früheren Zeiten. Da konnte dann ein Package nur compiliert werden, wenn ein anderes auch vorhanden war. Verursacht war das letztlich durch ein eingebundenes DataModule.
Also immer auch gute Trennung achten.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 13:29
Hallo,

also das mit dem Button funktioniert. Er wird mir zur DesignTime korrekt angezeigt.

Warum ich das so mache?

1. Ich weiss es nicht besser.
2. Ich möchte einfach für verschiedenste Applikationen im Ballsportbereich, bei denen diese Komponente immer wieder zum Einsatz kommen würde, immer nur die Komponente auf das MainForm einer neuen Applikation ziehen und dann direkt loslegen, ohne jedes mal von 0 zu beginnen. So soll diese Komponente die komplette Verwaltung der Teams, samt Spieler und Ligabetrieb mit allen Matches realisieren. Da ich das relativ häufig brauche, dachte ich, es wäre vielleicht eine gute Idee dass jetzt mal in eine Komponente zu verpacken.

Vielleicht könnte man da auch was mit Komponentenvorlagen, ActiveX oder einem TFrame als Vorlage machen, aber das weiss ich nicht genau.
Danke
Tom
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 13:48
Ich wüsste jetzt nicht, warum das mit einem Formular eigentlich nicht zur Designtime funktionieren sollte (wobei man überlegen sollte ob es wirklich notwendig ist).

Formulare und Frames haben beide Vor- und Nachteile. M.E. spricht nicht unbedingt etwas geben Formulare.
völlig OT:
wie schon gesagt halte ich nix davon das schon zur Designzeit zu machen, aber bei den Formularen würde mich das interessieren wie - Ok, vielleicht von TFrames was ableiten was mit den Formularen funktioniert..?!?

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 13:48
Ja nee, ist ja alles ok. Habe ich ja auch grundsätzlich so gemacht.

Allerdings habe ich die Controls dynamisch erzeugt und in meine Komponente eingebaut (habe also nicht ein Formular als Vorlage genommen).
Sieht man denn den Formularrahmen, wenn Du das so löst?

Zeigst Du mal 1-2 Screenshots?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 14:48
Mit beiden Lösungen sieht man KEINEN Formularrahmen. Wenn man ein Formular einbindet muss man natürlich noch den BorderStyle auf bsNone stellen, dass ist eigentlich alles gut.
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Formular auf Komponente sichtbar zur DesignTime erzeugen - Wie?

  Alt 17. Jan 2013, 15:52
Ich möchte einfach für verschiedenste Applikationen im Ballsportbereich, bei denen diese Komponente immer wieder zum Einsatz kommen würde, immer nur die Komponente auf das MainForm einer neuen Applikation ziehen und dann direkt loslegen, ohne jedes mal von 0 zu beginnen. So soll diese Komponente die komplette Verwaltung der Teams, samt Spieler und Ligabetrieb mit allen Matches realisieren. Da ich das relativ häufig brauche...
Das was du hier beschreibst ist kein Job für eine Komponente!
Eine Komponente ist wie ein Legobaustein mehr oder weniger universell einsetzbar.
Ausserdem hat eine Komponente eine ganz klar umrissene Aufgabe.
Jegliche Information, die die Komponente benötigt wie ihr von Aussen über Properties zugänglich gemacht.

Deine Team-, Spieler-, Liga- und Matchverwaltung würde den Rahmen einer Komponente bei Weitem sprengen.
Wenn du mehrere Anwendungen hat, die einen bestimmten Funktionsumfang gemeinsam haben, dann solltest du den Code in ein gemeinsames Verzeichnis legen.
Die Units werden dann einfach von allen Projekten eingebunden und benützt.

In dieser gemeinsamen Bibliothek wird es wohl mehrere Formulare oder Frames geben (jeweils eines zum Anzeigen/Editieren von Spielern, Teams und Matches).
  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 15:38 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