AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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 himitsu
himitsu

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

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
 
#2

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.754 Beiträge
 
Delphi 12 Athens
 
#3

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
Marco Steinebach

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

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 11:56
Hallo Himitsu,
Erstmal Danke für deine Hilfe.
Fehlermeldungsfrei, aber das Label ist immernoch nicht zu sehen.
Code:
  protected
    { Protected-Deklarationen }
    procedure setParent (aParent: TWinControl); override;
.....
constructor TMsDatumCombo.create (aOwner: TComponent);
begin
  inherited create (aOwner);
  fShowLabel := true;
  fCaption := '';
  fLabel := TLabel.create (self);
  with fLabel do
  begin
    left := self.left;
    top := self.top;
    focusControl := self;
    Caption := self.Caption;
  end;
  self.left := self.left + 120;
end;

procedure TMsDatumCombo.setParent (aParent: TWinControl);
begin
  fLabel.parent := aParent;
  inherited setParent (aParent);
end;
Noch eine Idee, warum das Label nicht angezeigt wird?
Und, Frage 2: wo kann ich Werte für die Items einer ComboBox vorgeben, im onCreate jedenfalls nicht...

Herzlich grüßt
Moo
Marco Steinebach
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.605 Beiträge
 
Delphi 7 Professional
 
#5

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 12:10
Eventuell so?
Delphi-Quellcode:
constructor TMsDatumCombo.create(aOwner: TComponent);
begin
  inherited create(aOwner);
  fShowLabel := true;
  fCaption := '';
  fLabel := TLabel.create(self);
  fLabel.Parent := Self;
  fLabel.left := left;
  fLabel.top := top;
  fLabel.focusControl := self;
  fLabel.Caption := Caption;
  self.left := self.left + 120;
end;
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
658 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 12:28
Du solltest noch SetBounds überschreiben und da die Position deines Labels anpassen. Wenn die Grösse des Edits verändert wird, passt sonst die Position deines Lables nicht mehr. Das Label wird direkt hinter dem Edit platziert und daher siehst du es auch nicht.

Geändert von Rolf Frei (16. Jul 2021 um 13:11 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.252 Beiträge
 
Delphi 12 Athens
 
#7

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 12:38
Vielleicht sollte man das besser in einer überladenen .Loaded; Funktion machen, da sollte schon das Meiste hochgefahren sein ?
http://docwiki.embarcadero.com/RADSt..._After_Loading
http://docwiki.embarcadero.com/RADSt..._After_Loading

Im Create würde ich möglichst wenig machen.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:30 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