boolean property mit Vorgabewert
-
- Beiträge: 140
- Registriert: Fr 21. Nov 2008, 11:29
- OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
- CPU-Target: 32/64Bit
Re: boolean property mit Vorgabewert
Jetzt verstehe ich mein Dilemma :
Ich glaubte, den Wert einen Properties (.B..von außen, durch ein Inifile) vorgeben zu können,
so dass es, je nach Nutzer, verschiedene Default Werte annehmen könnte.
Das geht natürlich nicht mittels "Default ", da man den Wert dann schon kennen muss, wenn die Komponente programmiert wird !
Um mein Ziel trotzdem zu erreichen, hatte ich versucht, einen eigenen Handler mit defineproperties zu schreiben :
boolean wurde dabei hinter den Kulissen als integer gestreamt : 0=false 1=true <0=defaultWert. Das hätte auch schön funktioniert,
doch leider wurde die property 2x im lfm file abgelegt : 1x wie von mir gewünscht und einmal durch den defaulthandler.
Daher meine Frage : kann man den Original Default Handler unterdrücken ? Wie ?
Zugegeben, oft kommt das nicht vor, aber manchmal wäre es schön, als Programmierer seine Komponenten individualisiert nutzen zu können.
Falls es irgendeinen von Euch interessiert, poste ich gern meinen Versucht ins Forum.
Vielleicht sollte dann ein neues Thema aufgemacht werden ?!
Wie ist Eure Meinung
Ich glaubte, den Wert einen Properties (.B..von außen, durch ein Inifile) vorgeben zu können,
so dass es, je nach Nutzer, verschiedene Default Werte annehmen könnte.
Das geht natürlich nicht mittels "Default ", da man den Wert dann schon kennen muss, wenn die Komponente programmiert wird !
Um mein Ziel trotzdem zu erreichen, hatte ich versucht, einen eigenen Handler mit defineproperties zu schreiben :
boolean wurde dabei hinter den Kulissen als integer gestreamt : 0=false 1=true <0=defaultWert. Das hätte auch schön funktioniert,
doch leider wurde die property 2x im lfm file abgelegt : 1x wie von mir gewünscht und einmal durch den defaulthandler.
Daher meine Frage : kann man den Original Default Handler unterdrücken ? Wie ?
Zugegeben, oft kommt das nicht vor, aber manchmal wäre es schön, als Programmierer seine Komponenten individualisiert nutzen zu können.
Falls es irgendeinen von Euch interessiert, poste ich gern meinen Versucht ins Forum.
Vielleicht sollte dann ein neues Thema aufgemacht werden ?!
Wie ist Eure Meinung
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: boolean property mit Vorgabewert
Um die automatische streamung von properties zu verhindern hänge "stored false" an die property Definition. Danach kannst du in defineproperties() deine eigene Speicherung verwenden. Ich weiss aber nicht,ob dies dein Problem löst.arturx hat geschrieben: Daher meine Frage : kann man den Original Default Handler unterdrücken ? Wie ?
Edit:
Warum musst du den die ini-Werte in die streamung einbauen? Nachträgliches Überschreiben geht nicht?
-
- Beiträge: 140
- Registriert: Fr 21. Nov 2008, 11:29
- OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
- CPU-Target: 32/64Bit
Re: boolean property mit Vorgabewert
Beispiel :mse hat geschrieben: Warum musst du den die ini-Werte in die streamung einbauen? Nachträgliches Überschreiben geht nicht?
Ich möchte, dass ein property für jeden Entwickler (oder verschiedene Projekte) unterschiedliche Vorgabewerte annehmen kann.
Die dann evt. folgenden Änderungen durch den OI dürfen beim wiederholten Aufruf der IDE nicht wieder durch Vorgabewerte überschrieben werden.
Zuletzt geändert von arturx am So 7. Feb 2010, 10:14, insgesamt 1-mal geändert.
-
- Beiträge: 140
- Registriert: Fr 21. Nov 2008, 11:29
- OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
- CPU-Target: 32/64Bit
Re: boolean property mit Vorgabewert
Hier mein Versuch, der leider immer mit readerror endet. Wenn es funtkionieren würde, würde im reader fbo erst nach dem 1.Streamen überschrieben:
Code: Alles auswählen
type ttestcomp = class(tcomponent)
private
fbo: boolean;
protected
procedure defineproperties(filer : tfiler); override;
procedure writeXX(writer : twriter);
procedure readXX (reader : treader);
public
published
property bo: boolean read fbo write fbo stored false;
end;
//...................................
procedure ttestcomp.defineproperties(filer: tfiler);
begin
inherited defineproperties(filer);
filer.DefineProperty('bo',@readXX,@writeXX,true{store});
end;
//....................................
procedure ttestcomp.readXX(reader: treader);
var n : integer;
begin //erlaubt trotz boolean zu erkennen, ob schon gestreamt oder nicht
reader.readlistbegin;
n := reader.ReadInteger;
reader.readlistend;
If n= 1 then fbo := true;
If n=-1 then fbo := false;
// else nix !!!!!!
end;
//....................................
procedure ttestcomp.writeXX(writer: twriter);
var n : integer;
begin //erlaubt trotz boolean zu erkennen, ob schon gestreamt oder nicht
writer.writelistbegin;
If fbo
then writer.WriteInteger( 1)
else writer.WriteInteger(-1);
writer.WriteListEnd;
end;
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: boolean property mit Vorgabewert
Benutze nicht 'bo' sondern einen Namen, der zu keiner published property gehört. defineproperties() wir von treader nur aufgerufen, wenn keine published property des entsprechen Namens gefunden wird.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: boolean property mit Vorgabewert
Die property option "nodefault" sollte die impliziten Defaultwerte unterdrücken. Dokumentiert ist das Ganze unter:arturx hat geschrieben: Die dann evt. folgenden Änderungen durch den OI dürfen beim wiederholten Aufruf der IDE nicht wieder durch Vorgabewerte überschreiben werden.
http://www.freepascal.org/docs-html/ref ... 5-830006.4
-
- Beiträge: 140
- Registriert: Fr 21. Nov 2008, 11:29
- OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
- CPU-Target: 32/64Bit
Re: boolean property mit Vorgabewert
Das war die Lösung !!!!mse hat geschrieben: Die property option "nodefault" sollte die impliziten Defaultwerte unterdrücken.

Der Vollständigkeit nun noch der komplette Quelltext :
Code: Alles auswählen
ttestcomp = class(tcomponent)
private
fbo1: boolean;
public
constructor create(aowner: tcomponent); override;
published
property bo1: boolean read fbo1 write fbo1 nodefault;
end;
Trotzdem :
Die Idee, dem Writer andere Formate unterschzuschieben und beliebig zu manipulieren,
werde ich weiter verfolgen. Ich glaube bis jetzt noch nicht, dass es nur an dem Namen "bo" liegt.
Vielleicht kannst Du ja noch einmal einen Kommentar dazu geben, wenn ich demnächst
dieses Thema fortführe. Vielleicht wäre es aber besser, ein neues Thema anzufangen ?!
Ich hoffe sehr, dass Du dann auch wieder teilnimmst
(Kann man in diesem Forum eigentlich auch jemandem gezielt einen Hinweis schicken ?)
Wie auch immer, vielen Dank an mse !!!!! Arturx
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: boolean property mit Vorgabewert
Ich denke schon. Mit "bo" kann es nicht funktionieren. Listbeginn/listend sind vermutlich nicht notwendig.arturx hat geschrieben: Die Idee, dem Writer andere Formate unterschzuschieben und beliebig zu manipulieren,
werde ich weiter verfolgen. Ich glaube bis jetzt noch nicht, dass es nur an dem Namen "bo" liegt.
Ich lese die meisten nicht Lazarus-spezifischen Themen hier und versuche auch zu helfen, falls ich kann und wenn Theo mir nicht sofort eins aufs Dach gibt.Vielleicht kannst Du ja noch einmal einen Kommentar dazu geben, wenn ich demnächst
dieses Thema fortführe. Vielleicht wäre es aber besser, ein neues Thema anzufangen ?!
Ich hoffe sehr, dass Du dann auch wieder teilnimmst

Martin
Re: boolean property mit Vorgabewert
Du Ärmster!mse hat geschrieben: und wenn Theo mir nicht sofort eins aufs Dach gibt.![]()

Ich denke und bin auch persönlich der Meinung, dass deine Kompetenz hier höchst willkommen ist.
Ich hatte dich nur gebeten, die Werbetrommel für msegui in dem dafür bereitgestellten Forum zu rühren.
