Witam serdecznie,
Jestem w trakcie pisania komponentu bazującego na TreeView i HeaderView. Póki co mam jednak problem z właściwościami.
Od razu powiem, że nie interesuje mnie VirtualTreeView z uwagi na duży stopień skomplikowania i brak możliwości imporowania komponentów. Chcaiłbym nauczyć się pisać własne komponenty.
A więc do rzeczy,
type
TTreeColumns = class(TPersistent)
private
FFontSize: Integer;
FColor: String;
FColumn: String;
published
property FontSize : Integer read FFontSize write FFontSize;
property Color: String read FColor write FColor;
property Column: String read FColumn write FColumn;
end;
TColTree = class(TPanel)
private
FTreeColumns: TTreeColumns;
FTreeView : TTreeView;
FHeaderControl : THeaderControl;
protected
public
Constructor Create(AOWner:TComponent);override;
Destructor Destroy;override;
published
property TreeColumns : TTreeColumns read FTreeColumns write FTreeColumns;
property TreeView : TTreeView read FTreeView write FTreeView;
property HeaderControl : THeaderControl read FHeaderControl write FHeaderControl;
end;
Po skompilowaniu komponent dobrze wygląda, mogę dodwać dyamicznie naglowki oraz elementy do drzewka. Mam jednak klopot z właściwościami. Gdy jest w widoku projektowania formularza, i we właściwościach Panelu --> HeaderControl --> Sections zakładam nowe sekcje, to widzę je od razu na formularzu. jednak po uruchomieniu programu, nie ma już tych sekcji. Nie ma tego problemu gdy dodaję sekcje w trakcie działania programu. Przypuszczam zatem, że pomimo, iż w ObjectInspektorze wposuje nagłowki kolumn, to informacja ta nie przenosi sie na mój komponent po uruchomieniu.
Poniżej załączam konstruktora komponentu ColTree.
Constructor TColTree.Create(AOWner:TComponent);
begin
inherited Create(Aowner);
FHeaderControl := THeaderControl.Create(Self);
FHeaderControl.Parent := Self;
FHeaderControl.Align := alTop;
FTreeView := TTreeView.Create(Self);
FTreeView.Parent := Self;
FTreeView.Align := alTop;
FTreeColumns := TTreeColumns.Create;
// HeaderControl.Sections.add.Text := TreeColumns.Column;
end;
W ostatniej linii próbowalem nawet sprawdzic, czy gdybym wypelnil wlasciwosc Column to czy podczas tworzenia komponentu ColTree zostanie zalozona sekcja to i tak nie dziala. Wlasciwosc jest pusta.
Mam wrazenie ze nie do konca rozumiem widocznosc wlasciwosc.
Czy jeseli osadzilem HeaderControl na Panelu, to juz nie moge sie tak latwo odnosci do wlasciwosci HeaderControla, tylo musze je niejako od nowa oprogramowac. Byc moze trzeba by zastosowac procedurę, przenoszącą wlaściwości z pola column do headercontrol juz po uruchomieniu programu ?
z góry dziękuje za pomoc. To mój pierwszy post na forum, choć aktyuwnie czytam je już od dłuższego czasu. Dodam także, że po nabyciu książki Adama B, nie byłem w stanie rozkminić mojego przypadku.
Podsumowując, jesli dodaję sekcje po uruchomieniu programu to jest OK, ale wolalbym wypelnic te sekcje w Inspektorze Objektow juz na etapie projektowania formularza.