![]() |
Eigene Property - Zur Runtime wieder zurückgesetzt
Hi,
Also ich bin ja gerade ne Property mit dem PropertyEditor am basteln.. Also das klappt auch soweit schon... Während der Designtime wird alles richtig angezeigt. Wenn ich das Programm aber starte dann ist die Komponente im Ur-Zustand :(
Delphi-Quellcode:
Die EditForm:
procedure Register;
begin RegisterPropertyEditor(TypeInfo(TDPListItems), nil, '', TDPItemPropEdit); end; procedure TDPItemPropEdit.Edit; var Dlg: TDPListItemsEditForm; begin Dlg := TDPListItemsEditForm.Create(Application); try with Dlg do begin DPItems := TDPListItems(GetOrdValue); ShowModal; end; finally FreeAndNil(Dlg); end end; function TDPItemPropEdit.GetAttributes: TPropertyAttributes; begin Result := [paDialog]; end;
Delphi-Quellcode:
Woran kann das liegen? :|
procedure TDPListItemsEditForm.FormShow(Sender: TObject);
var i: Integer; begin // "Laden" for i:= 0 to DPItems.Count-1 do ListBox1.Items.Add(DPItems[i].Caption); DPItems.Clear; end; procedure TDPListItemsEditForm.Button2Click(Sender: TObject); var i: Integer; begin // OK Button.. Properties werden gesetzt.. der Property editor wird geschlossen for i:= 0 to ListBox1.Count-1 do begin DPItems.Add(ListBox1.Items[i]); end; Close; end; procedure TDPListItemsEditForm.Button1Click(Sender: TObject); begin ListBox1.Items.Add(Edit1.Text) end; Gruß Neutral General |
Re: [Eigene Property] Designtime->OK Runtime-> :|
Zitat:
Poste mal mehr Informationen, Screenshot mit Beisp., ... [edit] Die Component- und Property-Editoren werden ja nur in der IDE benutzt. Zur Laufzeit werden sie nicht aufgerufen, bzw sind gar nicht in der Exe enthalten. Sie solten also keine Programmlogik enthalten. Sie dienen nur dem komfortablen Zuweisen von Werten in der IDE. [/edit] |
Re: [Eigene Property] Designtime->OK Runtime-> :|
Liste der Anhänge anzeigen (Anzahl: 2)
@ MaBuSE Edit: Ja das weiß ich ja... Guck mal
EDIT: Der Editor ist noch nicht so schön aber das is ja auch nur mal um zu gucken obs geht.. das die ListBox nach dem start so klein ist, kommt von ner Art AutoSize-Funktion die das Ding hat ;) |
Re: [Eigene Property] Designtime->OK Runtime-> :|
Zitat:
Normale Properties werden direkt in der Formulardatei (*.dfm) gespeichert. Mit Objekten funktioniert das aber nicht. Du mußt Dich also selbst darum kümmern die Infos in der DFM zu speichern. Hier findest Du weitere Infos: ![]() Das müsste so oder so ähnlich gehen. (Habe ich jetzt nicht in Delphi getestet ;-) )
Delphi-Quellcode:
...
type TMyComp = class(TComponent) private FMyData: TMyData; procedure ReadMyData(Reader: TReader); procedure WriteMyData(Writer: TWriter); ... protected procedure DefineProperties(Filer: TFiler); ... published MyData: TMyData read FMyData write FMyData; ... procedure TMyComp.DefineProperties(Filer: TFiler); function WriteData: Boolean; begin if Filer.Ancestor <> nil then Result := not FMyData.IsEqual(TMyComp(Filer.Ancestor).FMyData) else Result := FMyData.Count > 0; end; begin inherited DefineProperties(Filer); Filer.DefineProperty('MyData', ReadMyData, WriteMyData, WriteData); end; procedure TMyComp.ReadMyData(Reader: TReader); begin Reader.ReadValue; Reader.ReadCollection(MyData); end; procedure TMyComp.WriteMyData(Writer: TWriter); begin Writer.WriteCollection(MyData); end; ... |
Re: [Eigene Property] Designtime->OK Runtime-> :|
EHm ja danke.. Aber copy&paste geht nicht weil zum Beispiel meine Klasse kein IsEqual hat oder weil ich nicht mit dem Writer meine Klasse schreiben kann weil meine Klasse nicht vom Typ TCollection ist usw.. Außerdem versteh ich das irgendwie nicht genau.. :(
Kannst du mirs eventuell genauer erklären ? :stupid: :| Gruß Neutral General |
Re: [Eigene Property] Designtime->OK Runtime-> :|
Zitat:
![]() Dort steht: Zitat:
Zitat:
Brauchst Du ein Tutorial wie man die Hilfe aufruft? Ich bin nun im Wochenende, ... bis Montag. |
Re: [Eigene Property] Designtime->OK Runtime-> :|
Hai Neutraler General,
kannst Du den Titel deines Postings bitte so anpassen das er, wie alle anderen auch, als Frage im Forum gesehen wird? dur die [xx] sieht es, für mich, so aus als wäre das etwas wichtiges. Danke. |
Re: Eigene Property - Zur Runtime wieder zurückgesetzt
So hab das jetzt mit ner BinaryProperty gemacht.. aber wenn ich die Exe starte dann bekomm ich diesen Fehler:
Zitat:
Meine Lese/Schreibe proceduren:
Delphi-Quellcode:
procedure TDPListBox.ReadMyData(AStream: TStream);
var i: Integer; tmp: Integer; begin AStream.Read(tmp,SizeOf(Integer)); FItems.FCount := tmp; SetLength(FItems.FItems,Count); for i:= 0 to Count-1 do begin FItems[i] := TDPListItem.Create(Self); AStream.Read(tmp,SizeOf(Integer)); SetLength(FItems[i].FCaption,tmp); AStream.Read(FItems[i].FCaption[1],tmp); AStream.Read(FItems[i].FImageIndex,SizeOf(Integer)) end; end;
Delphi-Quellcode:
Und die Define Properties Procedure:
procedure TDPListBox.WriteMyData(AStream: TStream);
var i: Integer; tmp: Integer; begin tmp:= Count; AStream.Write(tmp,SizeOf(Integer)); for i:= 0 to Count-1 do begin tmp := Length(FItems[i].FCaption); AStream.Write(tmp,SizeOf(Integer)); AStream.Write(FItems[i].FCaption[1],tmp); AStream.Write(FItems[i].FImageIndex,SizeOf(Integer)); end; end;
Delphi-Quellcode:
Ich bin naah dran aber wie gehts weiter ?^^
procedure TDPListBox.DefineProperties(Filer: TFiler);
begin inherited DefineProperties(Filer); Filer.DefineBinaryProperty('Items',ReadMyData, WriteMyData, Count > 0); end; Gruß Neutral General |
Re: Eigene Property - Zur Runtime wieder zurückgesetzt
Biddöö :stupid:
Ich bin sooo nahhhh dran :) Also im Forumlar steht z.B sowas:
Delphi-Quellcode:
...
object DPListBox1: TDPListBox Left = 208 Top = 64 Width = 385 Height = 113 Footer = ftRect Items = { 020000000500000048616C6C6F000000000000000004000000546F6C6C000000 0000000000} end |
AW: Eigene Property - Zur Runtime wieder zurückgesetzt
Ich weiß, ist jetzt bissel spät für eine Antwort, aber ich habe mich gerade selbst mit dem Thema auseinandergesetzt.
Wenn du bei deiner Komponente ein Unterobjekt vom Typ TPersistent hast, dann baue in dieses die Struktur mit DefineProperties ein, so wie es oben steht. In der .dfm-Datei steht dann der Eintrag ähnlich vermerkt wie:
Delphi-Quellcode:
oder ähnlich. Hoffe, das ist für den einen oder anderen hilfreich, bei mir funktioniert es so auf jeden Fall und wird auch von der VCL (z.B. bei Strings-Eigenschaft des TMemo) verwendet.
Unterobjekt.Untereigenschaft
lg K.S.M. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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 by Thomas Breitkreuz