![]() |
Eigene Komponente "vergißt" OI-Einstellung
Hallo,
ich habe mir eine von TSTringGrid abgeleitete Komponente geschaffen, der ich nun noch die Möglichkeit geben wollte, im Objektinspektor die Spaltenüberschriften (ColumnHeader) eingeben zu können. Das klappt auch alles. Die Daten werden auch im DFM-File gespeichert. Dummerweise werden die Spaltenüberschriften aber nicht wieder in das Formular geladen, wenn man das Projekt geschlossen hatte und wieder neu öffnet. Die Daten stehen zwar im OI, aber erst wenn man sie neu bestätigt, werden sie auch in das Grid geschrieben. Was fehlt mir da noch oder was mache ich falsch? Danke im Voraus! Freejay Hier der relevante Code:
Delphi-Quellcode:
TMyStringGrid = class(TStringGrid)
private FColumnHeader: TStrings; procedure SetColumnHeader(Value: TStrings); 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); var iCol: integer; begin FColumnHeader.Assign(Value); 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-Einstellungen
Du hast die Properties auch nicht für die Persistenz konfiguriert (stored)
|
Re: Eigene Komponente "vergißt" OI-Einstellung
Was bedeutet das oder was muss ich konkret anders machen (neue/erweiterte Komponenten sind nicht gerade mein "täglich Brot"...)?
|
Re: Eigene Komponente "vergißt" OI-Einstellung
Also ich würde am Ende der Routine SetColumnHeader noch einen Aufruf der geerbten Methode update einfügen, so das die Komponente neu gezeichnet wird und die Spaltenüberschriften entsprechend gezeichnet werden können.
|
Re: Eigene Komponente "vergißt" OI-Einstellung
Delphi-Quellcode:
property ColumnHeader: TStrings read FColumnHeader write SetColumnHeader stored True;
|
Re: Eigene Komponente "vergißt" OI-Einstellung
Zitat:
Nachtrag: Außerdem kann man "stored true" weglassen (ist der Default-Wert), wie ich gerade in der Hilfe entdeckt habe. |
Re: Eigene Komponente "vergißt" OI-Einstellung
Hi,
wie bereits vorher von Ghostwalker gesagt. In der SetColumnHeader-Methode zum schluß ein Invalidate. Dann wird nach dem setzen der eigenschaft die Kompo neu gezeichnet und alles ist ok. Stored stellt nur sicher, dass die Werte in der dfm abgelegt werden. Gruß oki |
Re: Eigene Komponente "vergißt" OI-Einstellung
Ich habe das ausprobiert. Leider bringt ein Invalidate oder auch ein Repaint, und was es da alles noch so gibt, nichts.
Die Daten werden ja auch problemlos übernommen und angezeigt, wenn ich sie im OI bearbeitet und dann mit OK bestätigt habe. |
Re: Eigene Komponente "vergißt" OI-Einstellung
Dann sind beim Laden der form und lesen der Titel die Columbs noch nicht da. Rufe nach dem Erstellen der Kompo explizit das Laden der titel auf.
So nach dem Motto, Titeltexte sind vor den Spalten da, also nach erstellung spalten kein Laden der schon vorhandenen titel. Sorry muß jetzt mal weg, deshalb so kurz. gruß oki |
Re: Eigene Komponente "vergißt" OI-Einstellung
OK, werde ich am Montag probieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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