![]() |
Re: Eigene Komponente "vergißt" OI-Einstellung
ich würde einfach zusätzlich noch das OnChange der Stringlist belegen. Denn man ist nicht gezwungen eine komplette Stringlist zu zuweisen sondern kann auch einfach über Stringlist.Strings etc. den Inhalt ändern und dann passiert bei deiner Komponente rein gar nix.
|
Re: Eigene Komponente "vergißt" OI-Einstellung
Hallo Leute,
leider bin ich noch keinen Schritt weiter gekommen. Das von mir hinzugefügte Feld FColumnHeader ist während des Create-Ereignisses noch nicht gefüllt (die Daten aus dem dfm-File stehen noch nicht drin): Ist ja auch logisch, da wird das Feld ja auch erst erzeugt (siehe Code oben). Wenn das Programm, in dem ich diese Komponente verwende läuft, kann ich aber den Inhalt von ColumnHeader auslesen und er ist auch korrekt. Erkenntnis: Der Code meiner Zuweisungsroutine SetColumnHeader wird beim Programmstart nicht durchlaufen, das Feld FColumnHeader aber trotzdem gefüllt! Die gut gemeinten Ratschläge an allen möglichen Stellen Repaint, Invalidate oder Ähnliches einzufügen, können also nichts bewirken, da die Zuweisungsroutine selbst offenbar nicht aufgerufen wird. Müsste die nicht von der IDE bzw. der VCL aufgerufen werden, wenn die Daten aus dem OI in die Komponente übertragen werden? :cry: |
Re: Eigene Komponente "vergißt" OI-Einstellung
hast du das von mir geschriebene beachtet? Im Moment rufst du SetColumnHeader schließlich nur auf wenn direkt eine Stringliste zugewiesen wird aber nicht wenn die Stringliste einfach geändert wird.
|
Re: Eigene Komponente "vergißt" OI-Einstellung
Hallo,
Du musst die Loaded Methode überschreiben. Die Direktive stored bewirkt lediglich, dass die property auch gespeichert wird wenn sie den Defaultwert enthält.
Delphi-Quellcode:
TMyStringGrid = class(TStringGrid)
private FColumnHeader: TStrings; procedure SetColumnHeader(Value: TStrings); procedure FillHeader; protected procedure Loaded; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property ColumnHeader: TStrings read FColumnHeader write SetColumnHeader; end; constructor TMyStringGrid.Create(AOwner: TComponent); begin inherited create(AOwner); FColumnHeader := TStringList.Create; end; destructor TMyStringGrid.Destroy; begin FColumnHeader.Free; inherited destroy; end; procedure TMyStringGrid.SetColumnHeader(Value: TStrings); begin FColumnHeader.Assign(Value); FillHeader; end; procedure TMyStringGrid.Loaded; begin inherited Loaded; FillHeader; end; procedure TMyStringGrid.FillHeader; var iCol: integer; begin for iCol := 0 to ColCount - 1 do if iCol < FColumnHeader.Count then Cells[iCol,0] := FColumnHeader[iCol] else Cells[iCol,0] := ''; end; |
Re: Eigene Komponente "vergißt" OI-Einstellung
Yes! Vielen Dank für den Tip!
Das Überschreiben von "Loaded" lädt mir die Spaltenüberschriften jetzt beim Starten des Programms. Aber leider werden die Spaltenüberschriften nach dem Neu-Laden des Projektes nach wie vor nicht angezeigt :cry: NACHTRAG: Funktioniert jetzt doch "in allen Lebenslagen" (hatte vergessen mein Package zu aktualisieren...). Vielen Dank noch mal! Freejay |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 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