Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Neue Komponente / Properties speichern ? (https://www.delphipraxis.net/30332-neue-komponente-properties-speichern.html)

Gruber_Hans_12345 23. Sep 2004 15:39


Neue Komponente / Properties speichern ?
 
Hi

Hab eine eigene Komponenten (Abgeleitet von TEdit), die ein zusätzliches Property onlyShow hat.
Wenn onlyShow TRUE ist, dann wird
Delphi-Quellcode:
Cursor     := crArrow;
Color      := clBtnFace;
Alles funktioniert soweit, das einzige, was mich noch etwas stört, ist wenn ich im Designmodus onlyShow auf TRUE setze, dann wird bei der Komponente die Properites umgestellt, und AUCH im Form ABGESPEICHERT !

Kann ich das verhindern (da die Infos nun ja doppelt sind) Cursor setzen, Farbe stzen und onlyShow setzt dann wiederum beide !

Gruss
Hans

alcaeus 23. Sep 2004 15:43

Re: Neue Komponente / Properties speichern ?
 
Hi Hans,

ich weiß jetzt nicht genau warum du diese eigene Komponente hast, aber warum versuchst du nicht, ein TLabel o.ä. zu verwenden?
Zu deinem Problem: warum stört es dich dass die Werte geändert werden?
Vielleicht bring dich ja dieser Tipp weiter.

Greetz
alcaeus

Stevie 23. Sep 2004 15:47

Re: Neue Komponente / Properties speichern ?
 
Du könntest in der SetMethode deines Properties, den ComponentState abfragen und wenn der auf csDesigning befindet, die Werte nicht ändern:
Delphi-Quellcode:
procedure SetOnlyShow(const Value: Boolean);
begin
  if not (csDesigning in ComponentState) then
  begin
    Cursor := crArrow;
    Color := clBtnFace;
  end;
end;

Hansa 23. Sep 2004 16:11

Re: Neue Komponente / Properties speichern ?
 
Ich vermute mal, er will den Style eines Edit und dieses dann auf enabled := false setzen, also, daß er schon im OI festlegen kann, ob es standardmäßig editierbar ist.

Mehr gibt meine Glaskugel nicht her. 8)

Gruber_Hans_12345 23. Sep 2004 16:16

Re: Neue Komponente / Properties speichern ?
 
@Hansa, alcaeus
So ungefähr, im OnEnter hab ich noch nen Aufruf drinnen, der den Focus automatisch zum nächsten Control gibt. Ein Label wäre nicht ausreichend, da es optisch gleich sein sollte, und leicht umstellbar, wenn der User doch was eingeben soll.

@Stevie:

Werds gleich mal probieren, aber fürchte, das mit dieser Version ich im Designmodus nicht mehr erkennen welchen Status ich gesetzt habe ... (Da ja die Farbe gar nicht mehr geändert wird oder ?)

Gruss
Hans

alcaeus 23. Sep 2004 16:20

Re: Neue Komponente / Properties speichern ?
 
Zitat:

Zitat von Gruber_Hans_12345
Werds gleich mal probieren, aber fürchte, das mit dieser Version ich im Designmodus nicht mehr erkennen welchen Status ich gesetzt habe ... (Da ja die Farbe gar nicht mehr geändert wird oder ?)

Aber ShowOnly wird noch geändert, und anhand dessen kannst du wissen, in welchem Status du bist.
Ansonsten bleibt dir wohl nichts anderes übrig, als den Fehler zu akzeptieren ;)

Greetz
alcaeus

Hansa 23. Sep 2004 16:30

Re: Neue Komponente / Properties speichern ?
 
eigene Komponenten sind einfach und schwierig zugleich. :lol: deshalb mal schön langsam : Was ist mit dem Feld "ShowOnly" ? Taucht das im OI auf ? Lassen sich die Werte korrekt auf true und false setzen ?

Läßt sich die Komponente wie ein normales Edit problemlos auf eine Form ziehen, oder kommen seltsame Fehlermeldungen ?

[EDIT]@Alcaeus : wieso soll er Fehler akzeptiern ? Wo gibts denn so was ? :shock:

Gruber_Hans_12345 23. Sep 2004 17:16

Re: Neue Komponente / Properties speichern ?
 
@hansa:
Es gibt ja keine richtigen Fehler, es funktioniert alles wie es soll, das einzige, was mich persönlich stört, ist das die PRoperties, die ich in meiner Set Routine setze, im Formular abgespeichert werden, obwohl das ja ganz überflüssig ist (Farbe und Cursor wird ja dann eh von meiner Set procedure gesetzt !)
ODer aber, mit der InDesign if Abfrage, dann sieht man zur Design Zeit nicht mehr so schön, ob das Edit Control OnlyShow true oder false ist (natürlcih sieht mans im OI, aber vorher sahs man gleich an der Farbe des Edit Feldes .....)

Gruss
Hans

teebee 23. Sep 2004 18:19

Re: Neue Komponente / Properties speichern ?
 
Auch wenn mich das nicht so stören würde, vermute ich, dass es eine Lösung gibt. (Habe es allerdings noch nicht probiert...)
Ich fange mal mit 'Color' an. In der VCL ist Color folgendermaßen deklariert:
Zitat:

Zitat von VCL
property Color: TColor read FColor write SetColor stored IsColorStored default clWindow;

D.h. die Eigenschaft wird nur gespeichert, wenn die Funktion IsColorStored True zurückliefert.
Die sieht so aus:
Zitat:

Zitat von VCL
function TControl.IsColorStored: Boolean;
begin
Result := not ParentColor;
end;

Wenn Du in Deiner Editklasse diese Methode so überschreibst
Delphi-Quellcode:
Result := Not(ParentColor) And Not(OnlyShow);
wird Color nur noch gespeichert, falls OnlyShow auf False steht (und ParentColor natürlich auch).

Für das Cursor-Property kannst Du Dir das analog basteln, dafür gibt es allerdings noch keine IsCursorStored Funktion, die musst Du komplett neu machen und auch die stored-Direktive in die Property-Deklarartion übernehmen.
Den Quelltext der VCl hast Du ja, ist alles in controls.pas.

Übrigens würde ich die Farbe nicht stur auf clBtnFace setzen sondern auf (Parent as TWinControl).Color, falls das Form mal eine andere Farbe hat.

Wie gesagt, da ganze ist nur eine Idee, habe es nicht probiert...

Gruß, teebee

Gruber_Hans_12345 23. Sep 2004 18:43

Re: Neue Komponente / Properties speichern ?
 
@teebee
Interessante Idee, aber wie kann ich eine private methode überschreiben ?

Ich will die Farbe nicht auf die Farbe des Forms setzen (könnte ja dann auch Parentcolor verwenden) sondern die Farbe wird aus einer andern Funktion berechnet ... wollte das Beispiel so einfach wie Möglich halten ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz