Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tedit disabled (https://www.delphipraxis.net/7437-tedit-disabled.html)

ketraun 13. Aug 2003 17:34

Re: Tedit disabled
 
hi,
ich versteh dich. Du sollst ja auch keinen Code rausrücken. Code ist pures Geld. Ich mach das seit 25 Jahren und weiss von was ich rede.

Ich komm bloss nicht dahinter was bei mir schief läuft. Das ärgert und wurmt mich so, dass ich doch weiter bohre.

Vielleicht kommt dir doch noch die grosse Erkenntnis! Ich kanns für Heute jedenfalls nicht mehr sehen.

ketraun

neolithos 13. Aug 2003 17:48

Re: Tedit disabled
 
Änders du den Font bei dem Edit-Control.

Noch ne andere Idee ich werde es mal versuchen über
CN_CTLCOLOREDIT (bzw. WN_CTLCOLOREDIT)

ketraun 14. Aug 2003 07:12

Re: Tedit disabled
 
hi,
nein hab den Font nicht geändert, alles schon probiert.
ketraun

ketraun 14. Aug 2003 09:07

Re: Tedit disabled
 
hi,
du hast, darauf könnte ich meinen Kopf verwetten, irgendwo die invalidate Methode von Tcontrol überschrieben!
Soweit konnte ich das zurückverfolgen.
Ich hab jetzt eine eigene Methode für invalidate eingeführt. Jetzt gehts, nur ist das editfeld nicht mehr zu disablen.
Die Farbe ändert sich. Ist doch schon was.
ketraun

neolithos 14. Aug 2003 09:09

Re: Tedit disabled
 
Ich mal ganz anderen Weg!

Das was du möchtest macht Windows schon als Standard!
Will man das beeinflussen muss man
(WM_)CN_CTLCOLOREDIT Wenn Normal
und
CN_CTLCOLORSTATIC wenn Disabled oder ReadOnly
abfangen.

So hab ich es bei mir abgeändert...

Delphi-Quellcode:
  private
    procedure CNCtlColorStatic(var Message : TWMCtlColor); message CN_CTLCOLORSTATIC;

procedure TPWEdit.CNCtlColorStatic(var Message: TWMCtlColor);
begin
  inherited; // mache Standard
  with Message do
    // für deinen Fall Enabled prüfen
    // und mittels SetTextColor den Farbwert ändern
    // wie gesagt das ist Windows-Standard
    if ReadOnly and (Parent <> nil) then
       begin
         Result := Parent.Brush.Handle;
         SetBkColor(ChildDC, ColorToRGB(Parent.Brush.Color));
       end;
end;

ketraun 14. Aug 2003 09:38

Re: Tedit disabled
 
hi,
komm lass gut sein. Ich dank dir für deine Mühe. ( der neueste Versuch klappt bei mir auch nicht )
Ich geh jetzt meinen Weg über Invalidate und ich bin überzeugt das geht.
Ich will dir nicht zu nahe treten, aber ich glaube, dass, das nur Zufall ist, dass das bei dir funktioniert.

Meine Kollegen sind jetzt an dem Problem dran:
Winnt, Win2000,
Delphi 2,5,6,7 überall funktionierts so nicht.

Und das liegt einfach nur daran, dass:
setenabled ( inherited ) sich selbst aufruft, dadurch wird invalidate aufgerufen und dann ist alles vorbei.
Invalidate setzt die Farbe auf grau. Es nützt nichts dann die Farben zu ändern. Alle die anderen Versuche gehen an dem Problem vorbei und beheben es nicht.
Es ist nötig Invalidate oder eine Routine, die durch diese aufgerufen wird zu überschreiben.
Ein Szenario wäre ( warum das bei dir geht ):
setenabled --> inherited --> Botschalt wird abgeschickt und damit vergeht soviel Zeit ( bei dir ) dass if enabled... abgearbeitet werden kann, bevor die message bearbeitet ist.

inherited;
if enabled then
Font.Color := clWindowText
else
Font.Color := clred;

Also, sei mir nicht böse für die Antwort, aber es lohnt sich nicht noch mehr Energie da reínzustecken.
Was mich noch interressieren würde, was für ein Betriebssystem benutzt du?

Nebenbei: das ist nicht das erste Mal dass ich solches Verhalten auf einem Rechner beobachte!
ketraun

neolithos 14. Aug 2003 09:48

Re: Tedit disabled
 
Delphi-Quellcode:
inherited;
if enabled then
Font.Color := clWindowText
else
Font.Color := clred;
Das hab ich schon längst entfernt, weil da hast du recht, es ist unsicher (del SetEnabled()). Die Letzte Variante klappt bei mir zu Hause (WinXP, D7 A) in der Firma (Win2k, D7 A) und sogar in anderen Programmiersprachen (Win2k, VO). Keine Ahnung warum es nicht geht WM_CTLCOLORSTATIC eigentlich vor dem Zeichnen gerufen wird.

Letzte Möglichkeit ist die Kontrolle der Windows-Farben!

Aber ich lass es jetzt auch gut sein.

Und noch mal danke das du mich auf das CN_CTLCOLORSTATIC gebracht hast (laut MSDN einzig ware weg). Gelichzeitig hab ich letzte Nacht ein wenig mehr ausgetauscht.

ketraun 14. Aug 2003 10:10

Re: Tedit disabled
 
hi,
genau da liegt das Problem:
WM_CTLCOLORSTATIC wird vor dem Zeichnen abgesetzt.
Bei Delphi (Tcontrol ) zeichnet aber invalidate ( oder löst es aus )
Das macht deine ganzen Einstellungen wieder futsch.
Und da kommt auch die Zeit ins Spiel. Wir haben unter VB Situationen in denen sich der Code selbst überholt.
Auf dieser Basis kann ich aber nicht programmieren. Unsere Tools müssen für alle MS Betriebssysteme geeignet sein und auch mit dem lahmsten Rechner laufen.
ketraun

PS: ich lass dich die Lösung wissen, wenn ich sie gefunden habe. Bin ganz nah dran.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.
Seite 3 von 3     123   

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