Einzelnen Beitrag anzeigen

Rolf Frei

Registriert seit: 19. Jun 2006
388 Beiträge
 
Delphi 10.3 Rio
 
#26

AW: Objekt im onCreate erzeugen, aber wie?

  Alt 16. Jul 2021, 17:10
Wenn du die Komponente zur Runtime erstellst, würde es gehen, aber das ist ja nicht das was wir wollen.

Die Position wird zur Runtime aus dem DFM geladen und dann ist das was du im Create machst nicht mehr aktuell. Nach dem Laden enspricht Edit.Left dem, wie es du in der Form platziert hast. Dein Label ist aber immer noch an der Stelle wie du es im Create platziert hast. Wenn das Edit, deine Hauptkomponente, die Grösse oder Position ändert, musst du auch die Position des Labels anpassen. Das kannst du ganz einfach im überschriebenen SetBounds machen.

Delphi-Quellcode:
procedure TMsDatumCombo.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  inherited;
  FLabel.Left := Left - FLabel.Width - x; // x wäre der Abstand zwischen den Edit und dem Label
  FLabel.Top := Top;
end;
Für dein Parent Problem gibt es auch eine Methode die du überschreiben kannst:
Delphi-Quellcode:
procedure TMsDatumCombo.SetParent(AParent: TWinControl);
begin
  inherited;
  FLabel.Parent := AParent;
end;
Für das Listbox Problem wüsste ich im Moment selber nicht genau wo ich das am besten machen würde. Würde eigentlich erwarten, dass das im Konstruktor schon geht, denke aber, dass das eben auch beim Laden der Form gelöscht wird. Müsste das auch genauer anschauen.

Versuch doch mal in deiner Komponente das Items als nicht stored zu definierern, damit die Items nicht im DFM gespeichert werden. Dein Package mit der Komponente musst du natürlich neu kompilieren, damit das geht.
Delphi-Quellcode:
  TMsDatumCombo= class(TCombobox)
  published
    property Items; stored False;
  end;
Wenn du das Items property eventuell komplett "ausschalten" willst, damit es im Designer nicht mehr sichtbar ist, mach folgendes in deiner Register Procedure der Komponente. Bin aber nicht sicher ob es das in D5 schon gab.
Delphi-Quellcode:
uses DesignIntf;
...
procedure Register;
begin
  ...
  UnlistPublishedProperty(TMsDatumCombo, 'Items');
end;

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