Announcement

Collapse
No announcement yet.

Was ist hier falsch ??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Was ist hier falsch ??

    Hallo zusammen.

    Ich hab mir folgenden Code gebastelt:

    <PRE>
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls;

    type
    TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    private
    { Private-Deklarationen }
    procedure WMSetFocus (var Message: TWMSetFocus); message WM_SETFOCUS;
    procedure WMKillFocus (var Message: TWMKillFocus); message WM_KILLFOCUS;
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    { TForm1 }

    procedure TForm1.WMKillFocus(var Message: TWMKillFocus);
    begin
    ShowMessage('Kill Fokus');
    end;

    procedure TForm1.WMSetFocus(var Message: TWMSetFocus);
    begin
    ShowMessage('Get Fokus');
    end;

    end.
    </PRE>

    Ich will die WMKILLFOCUS bzw. WMSETFOCUS Message auswerten.
    Das heißt wenn ein Edit z.B. den Fokus bekommt, soll es die Farbe ändern.
    Aber es passiert im Code nichts.
    Ich will nicht ein neues Edit bauen, da dieser Code auch mit anderen Feldern funktionieren soll.
    Wer kann mir helfen ??

  • #2
    Hallo,

    das obige Beispiel wertet die Win32-Botschaften auf der Fenster-Ebene des Formulars aus, aber wenn eine TEdit-Instanz "überwacht" werden soll, muss die an das jeweilig betroffene Control (alias Steuerelement) Edit1 geschichte Botschaft ausgewertet werden. Dazu gibt es verschiedene Techniken:

    a) Subclassing (Austauch der Fensterprozedur der Control-Instanz) im Formular

    b) Zur Laufzeit die Control-Implementierung von Edit1 austauschen (d.h. den self-Wert in der VMT durch einen Hack patchen)

    c) Neue Komponente ableiten

    In meinem Buch <i>Delphi Win32-Lösungen</i> (siehe <i>http://www.software-support.biz/sus/sus_buch/psecom,id,2,nodeid,11,_language,de.html</i>) stelle ich den Weg a) auf den Seiten 423-429 und den Weg b) auf den Seiten 429-431 vor.

    P.S: Nur der Weg c) passt in unsere schöne moderne RAD-Welt der visuellen Anwendungsentwicklung. Die beidenen anderen Weg gehen zwar auch, sind aber im Fall von b) immer nur auf eine bestimmte Delphi-Version beschränkt

    Comment


    • #3
      Danke für die Antwort.
      Lösung c) käme bei mir nicht in Frage, da wir in unsere Software ca. 1000 Editfelder haben, und wir diese dann nicht durch ein neues Edit ersetzen wollen. Außerdem soll das auch bei anderen Feld gehen (DBEdit, DateEdit,....).
      Gibt es nicht irgendwo ein kleines Beispiel, wie man sowas macht.
      Ich möchte einfach ein Komponente habe, die ich auf die Hauptform lege. Diese Kompo soll dann immer das Feld mit einer anderen Farbe hinterlegen, das gerade den Fokus hat. Wenn möglich auch auf allen Child - Fenstern der Anwendung. Das kann doch nicht so schwer sein

      Comment

      Working...
      X