Delphi-PRAXiS
Seite 1 von 3  1 23      

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 12. Aug 2003 11:44


Tedit disabled
 
hi,
wieder ein Problem mit Tedit.
wie ändert man die Farbe des Textes, wenn das Ding disabled ist?
Kann mir jemand helfen?
ketraun

neolithos 12. Aug 2003 12:17

Re: Tedit disabled
 
Das ist ein Weg:

Delphi-Quellcode:
  TNewEdit = class (TEdit)
  protected
    procedure SetEnabled(Value: Boolean); override;
  end;


procedure TNewEdit.SetEnabled(Value: Boolean);
begin
  inherited;
  if Value then
     Font.Color := clWindowText
  else
     Font.Color := clBtnFace;
end;

ketraun 12. Aug 2003 12:56

Re: Tedit disabled
 
hi,
tut mir leid aber das funktioniert nicht!
ketraun

neolithos 12. Aug 2003 13:05

Re: Tedit disabled
 
Genaures bitte :chat: ! Warum nicht?

sakura 12. Aug 2003 13:40

Re: Tedit disabled
 
@Ketraun: Hast Du dem Beitrag entnehmen können, daß Du dazu einen neue Komponente erstellen musst und diese auch in Delphi installieren mußt? Wenn nicht, dann wunder Dich nicht, neolithos hätte das wenigstens noch dazu schreiben können ;-)

...:cat:...

neolithos 12. Aug 2003 14:14

Re: Tedit disabled
 
Erstmal Entschuldigung!

Noch eine Variante ohne das man gleich ein neues Control erzeugen muss! Hab ich selbst aber leider noch nicht getestet!


Es gibt eine VCL-Nachricht namens CM_ENABLEDCHANGED, welche intern in SetEnabled abgeschickt wird.

Man muss sich nur an den Message-Handler des Edit-Controls anhängen.

Delphi-Quellcode:
TMyForm = class(...
  ...
  private
    pOldEdProc : TWndMethod;
    procedure EdProc(var Message: TMessage);
 
procedure TMyForm.FormCreate(...);
begin
  ...
  pOldEdProc := txtEd.WindowProc;
  txtEd.WindowProc := EdProc;
  ...
end;

procedure TMyForm.EdProc(var Message: TMessage);
begin
  pOldEdProc(Message); // andere Hacken unterstützen
  with Message do
    case Msg of
         CM_ENABLEDCHANGED:
           if txtEd.Enabled then
              ...
           else
              ...;
    end;
end;
Frage an den Moderator: Kann man nicht so was (ganz allgemein gehalten)als FAQ oder Source-Code ablegen?

ketraun 12. Aug 2003 14:44

Re: Tedit disabled
 
hi,
ich bin ja nicht doof, natürlich hab ich eine neue Komponente erstellt.
In der Entwicklungsumgebung gejts, nur zur Laufzeit nicht!
Der Alignmentkram muss nicht interressieren, ist zum Ausrichten gedacht!
Mach ich was falsch? Oder steht ich auf der Leitung?

ketraun
Delphi-Quellcode:
type
  TmaskeditL = class(Tmaskedit)
  private
    { Private-Deklarationen }
    fAlignment : TAlignment;
    fcolor:tcolor;
  protected
    { Protected-Deklarationen }
    procedure SetEnabled(Value: Boolean); override;
  public
    { Public-Deklarationen }
    procedure SetAlignment(const Value: TAlignment);
    procedure Setfcolor (const Value: Tcolor);
    procedure CreateParams(var Params: TCreateParams);override;
  published
    { Published-Deklarationen }
    property Alignment : TAlignment read fAlignment write SetAlignment;
    property dis_color:Tcolor      read fcolor    write Setfcolor;
  end;

procedure Register;

implementation

procedure TmaskEditL.SetAlignment(const Value: TAlignment);
begin
  if Value <> fAlignment then
     begin
       fAlignment := Value;
       RecreateWnd; // erzeuge Fenster neu -> CreateParams
     end;
end;

procedure TmaskEditL.Setfcolor (const Value: Tcolor);
begin
   fcolor:=value;
end;

procedure TmaskEditL.CreateParams(var Params: TCreateParams);
const
  cAlignStyles: array [TAlignment] of Cardinal = (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
  inherited;
  with Params do
    Style := Style or cAlignStyles[fAlignment];//taRightJustify];
end;

procedure TmaskEditL.SetEnabled(Value: Boolean);
begin
  inherited;
  if Value then
     Font.Color := clWindowText
  else
     Font.Color := fcolor;
end;

procedure Register;
begin
  RegisterComponents('Zusätzlich', [TmaskeditL]);
end;
[edit=Luckie]Delphi-Tags hinzugefügt. Mfg, Luckie[/edit]

ketraun 12. Aug 2003 15:06

Re: Tedit disabled
 
hi,

so gehts offensichtlich nicht:
Code:
procedure TmaskEditL.SetEnabled(Value: Boolean);
begin
  inherited;
  if Value then
     Font.Color := clWindowText
  else
     Font.Color := fcolor;
   invalidate;
end;
nach dem inherited ist offensichtlich alles vorbei. Es nützt also garnichts hier die Farbe zu ändern!
ketraun

ketraun 13. Aug 2003 08:50

Re: Tedit disabled
 
hi,
Kann mir jemand erklären warum dieses Verfahren in der IDE funktioniert, aber nicht zur Laufzeit! Die Compilereistellung ist es nicht, ist für beides eingestellt.
Wo ist der Unterschied zwischen IDE und laufendem Programm?
ketraun

neolithos 13. Aug 2003 11:01

Re: Tedit disabled
 
Bei mir sieht es fast genauso aus, nur das ich den Brush ändere. Es Funktioniert!

Schon mal mit dem Debugger die Werte kontrolliert!
Was steht in fColor, Value, Font.Color zu welcher Zeit?

Nimm mal das Invalidate heraus. Ich hab nämlich gerade das selbe für den Font gemacht und es Functioniert einwandfrei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 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