AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt im onCreate erzeugen, aber wie?

Ein Thema von Marco Steinebach · begonnen am 15. Jul 2021 · letzter Beitrag vom 19. Jul 2021
Antwort Antwort
Benutzerbild von stahli
stahli

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

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 15. Jul 2021, 20:56
Schau mal, ob Dir AfterCreate hilft: https://www.swissdelphicenter.ch/de/...de.php?id=1276
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
503 Beiträge
 
Delphi 5 Enterprise
 
#2

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 15. Jul 2021, 21:17
Hallo Zusammen,
@Stali: toll, das After Create hilft zwar hier nicht, aber das ist alle mal besser, als es mit einem Timer zu lösen - super, jetzt wird die Nacht noch länger.

Zu meinem eigentlichen Problem (TLabeledEdit) hab ich in meinem Uralt-Delphi leider noch nicht:
Code:
constructor TMsDatumCombo.create (aOwner: TComponent);
begin
  inherited create (aOwner);
  fOwner := aOwner;
  fShowLabel := true;
  fCaption := '';
  fLabel := TLabel.create (fOwner);
  with fLabel do
  begin
    left := self.left;
    top := self.top;
    focusControl := self;
    parent := self.parent;
    Caption := self.Caption;
  end;
  self.left := self.left + 120;
end;
Im Designer klappts, nur starte ich das Programm:
Exception Class TLabel not found.
Hääää?

Und wenn ich versuche, den Items in onCreate etwas hinzuzufügen, fliegt mir gleich der Objekt-Manager um die Ohren. Sprich, ich füge die Komponente ein:
Eltern-Objekt nicht vorhanden.

Ich bitte nochmal um Hilfe.

Herzliche Grüße
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 15. Jul 2021, 22:10
Evtl. musst Du Deine Unit statt compilieren noch einmal neu installieren.
Erst durch das Installieren wird die Komponente in der neuen Form in der IDE vollständig registriert.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
503 Beiträge
 
Delphi 5 Enterprise
 
#4

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 15. Jul 2021, 22:13
Huhu Stahli,
Bringt leider nichts...
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 15. Jul 2021, 22:32
Kannst Du Deine Unit oder ein Testprojekt oder ein Video mal zeigen?

Ich glaube zwar nicht, aber vielleicht bringt Dir SetSubComponent etwas: https://www.delphipraxis.net/79726-u...der-gruen.html
Dann wird das Label mit seinen Eigenschaften mit in der Formulardatei abgelegt (was die Formulargröße etwas erhöht).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.052 Beiträge
 
Delphi 12 Athens
 
#6

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 05:52
Zu meinem eigentlichen Problem (TLabeledEdit) hab ich in meinem Uralt-Delphi leider noch nicht:
Da es eine aktuelle Version für nicht-kommerzielle Zwecke kostenlos gibt, ist das ja kein Hindernis...

Im Designer klappts, nur starte ich das Programm:
Exception Class TLabel not found.
Versuche es einmal ohne Owner. Vielleicht klappt das mit dem Lademechanismus der Daten des Formulars nicht, wenn du da eine zusätzliche Komponente in den Owner hängst, die zur Designzeit unter dem Namen gar nicht vorhanden war. Denn die Werte werden natürlich erst nach dem Ausführen des Konstruktors geladen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 05:57
Hallo,
schreib mal unten ein RegisterClass(TLabel) rein.

etwa so

Unit Kompi

Interface

Implementstion


Begin
RegistrClass
End

Und dahinter noch ein MessageBox.
Dann siehst du, ob der richtige Quellcode verwendet wird.
Heiko

Geändert von hoika (16. Jul 2021 um 06:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.531 Beiträge
 
Delphi 12 Athens
 
#8

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 09:40
Wenn deine Komponente eine weitere "eigenständige" Komponente automatisch einfügen soll, dann muß sie den selben Owner bekommen. (aber das willst du ja nicht)

Deine Komponente ist Besitzer/Verwalter des Labels, also ist deine Komponente auch für die Erstellung/Freigabe verantwortlich.
* also dein Edit ist Owner des Labels (so macht es fast jeder Andere)
* oder der Owner ist NIL und du gibst im Destroy das Label selbst frei (unnötig umständlich)


Und zu TLabeledEdit
* jupp einfacher
* aber falls das mit dem Delphi 5 stimmt und nur jemand nicht zu faul war ausversehn vergessen hatte das einzustellen


PS: Ohne Clipping kann unter FMX das Label auch das Edit als Parent bekommen und dennoch außerhalb liegen.
Das erleichtert nochmal andere Dinge, wie Neuausrichtung, wenn das Edit verschoben wird, und die Skalierung.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Jul 2021 um 09:44 Uhr)
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
503 Beiträge
 
Delphi 5 Enterprise
 
#9

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 11:27
Hallo Zusammen,
Doch, doch, das meine Komponente Owner des Labels ist, ist völlig in Ordnung, ich bin nur nicht darauf gekommen das es geht.
Also heißt es bei mir jetzt:
Code:
constructor TMsDatumCombo.create (aOwner: TComponent);
begin
  inherited create (aOwner);
  fOwner := aOwner;
  fShowLabel := true;
  fCaption := '';
  fLabel := TLabel.create (self); // so???
  with fLabel do
  begin
    left := self.left;
    top := self.top;
    focusControl := self;
    parent := self.parent;
    Caption := self.Caption;
  end;
  self.left := self.left + 120;
end;
Das funktioniert fehlerlos, Problem ist, dass der Label nicht zu sehen ist, jedenfalls nicht für meinen Screenreader (Deshalb übrigens auch immernoch D5 ).
Ist ja auch eigentlich klar, dann das Besitzende Form hat ihn ja nicht in seiner Komponentenliste...
Hab ich da noch einen Fehler drin?
Löse ich das ganze über eine Methode (init), die im onShow des Formulars aufgerufen wird, ist alles schön, aber das ist natürlich nicht der Sinn.

Könnt ihr euch das bitte nochmal anschauen?
Ich häng' mal den Quelltext dran.
Herzlich grüßt
Moo
Angehängte Dateien
Dateityp: zip MSPackage.zip (58,7 KB, 5x aufgerufen)
Marco Steinebach

Geändert von Marco Steinebach (16. Jul 2021 um 11:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.531 Beiträge
 
Delphi 12 Athens
 
#10

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 11:33
Im Create ist Parent noch nicht zugewiesen ... kann auch nicht. (das Einzige, was du hast, ist der Owner-Parameter)

Aber du kannst SetParent deiner Komponente überschreiben und darin auch das Label aktualisieren.
Ein Therapeut entspricht 1024 Gigapeut.
  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 10:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz