AGB  ·  Datenschutz  ·  Impressum  







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

Zur Laufzeit Comboboxen hinzufügen

Ein Thema von KomischerKautz · begonnen am 14. Feb 2020 · letzter Beitrag vom 21. Feb 2020
 
Benutzerbild von himitsu
himitsu

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

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 18. Feb 2020, 11:34
siehe TComponentList (unit Contnrs)

Eine TList, die ein Dummy-TComponent drinnen hat oder die selbst ein TComponent ist, über dessen TComponent.Notification beim opRemove es das jeweilige Objekt aus der Liste löscht.
TList.Notify bei lnAdded via TComponent.FreeNotification registrieren und beim lnExtracted/lnDeleted via TComponent.RemoveFreeNotification deregistrieren. (wer bei wem ist egal, da alles gegenseitig)

Delphi-Quellcode:
procedure TComponentListDummy.Notification(AComponent: TComponent; Operation: TOperation);
begin
  if Operation = opRemove then
    Parent.Extract(AComponent); // Item aus Liste entfernen, ohne enthaltenes Objekt (nochmal) freizugeben
  inherited;
end;

procedure TComponentList.Notify(Ptr: Pointer; Action: TListNotification);
begin
  if Assinged(Ptr) then
    case Action of
      lnAdded:
        TComponent(Ptr).FreeNotification(FDummy);
      lnExtracted, lnDeleted:
        TComponent(Ptr).RemoveFreeNotification(FDummy);
    end;
  inherited;
end;
Nochmal als Beispiel mit einem Property:
Delphi-Quellcode:
type
  TDemo = class(TComponent)
  private
    FLink: TComponent;
    procedure SetLink(Value: TComponent);
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    property Link: TComponent read FLink write SetLink;
  end;

procedure TDemo.SetLink(Value: TComponent);
begin
  if Assigned(FLink) then
    Self.RemoveFreeNotification(FLink); // oder FLink.RemoveFreeNotification(Self);
  FLink := Value;
  if Assigned(FLink) then
    Self.FreeNotification(FLink);
end;

procedure TDemo.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if Operation = opRemove then begin
    if FLink = AComponent then
      FLink := nil;
  end;
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


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 08:01 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