AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Welche Windows Message beim Ändern der Eigenschaften Caption
Thema durchsuchen
Ansicht
Themen-Optionen

Welche Windows Message beim Ändern der Eigenschaften Caption

Offene Frage von "DataCool"
Ein Thema von DataCool · begonnen am 25. Mai 2009 · letzter Beitrag vom 23. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

Welche Windows Message beim Ändern der Eigenschaften Caption

  Alt 25. Mai 2009, 11:14
Hi Leute,

ich möchte mit bekommen, wenn sich die Caption oder der Hint eines Controls
oder der Action des Controls ändert.

Ich habe schon einen aktiven Hook("WH_CALLWNDPROC") am laufen,
welche Windows Message muss ich dazu abfangen ?

Das ganze muss für TWincontrols und auch für TControls funktionieren ?
Jemand eine Idee ?

Danke im vorraus,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 25. Mai 2009, 12:10
WM_SETTEXT klingt interessant?
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 25. Mai 2009, 12:56
Hi Satty,

hätte ich erwähnen sollen:
"WM_SETTEXT" hatte ich auch vermutet, allerdings kommt diese nicht in meinem Hook an

Hier mal ein wenig Code:
Delphi-Quellcode:
  // Hook starten
  FWndHook := SetWindowsHookEx(WH_CALLWNDPROC, pWndProcInst, 0, GetCurrentThreadId());
Delphi-Quellcode:
function TXYZ.CbWndProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var   cwps: TCWPStruct;
      tmpControl : TControl;
      tmpParentControl : TScrollingWinControl;
begin
   case nCode < HC_ACTION of
      True:
         begin
            Result := CallNextHookEx(FWndHook, nCode, wParam, lParam);
         end;
      else begin
         CopyMemory(@cwps, Pointer(lParam), SizeOf(CWPSTRUCT));
         case cwps.message of
            WM_SYSCOMMAND :
               begin
                  DebugMsg('WM_SYSCOMMAND hwnd: '+inttostr(cwps.hwnd)+'wParam: '+inttostr(wParam)+' lParam: '+inttostr(lParam));
                  // Control zu Handle ermitteln
                  tmpControl := FindControl(cwps.hwnd);

                  // Control gefunden ?
                  if Assigned(tmpControl) then begin

                     DebugMsg('WM_SYSCOMMAND '+tmpControl.ClassName);
                  end;               
               end;
            CM_TEXTCHANGED :
               begin
                  DebugMsg('CM_TEXTCHANGED hwnd: '+inttostr(cwps.hwnd));
                  // Control zu Handle ermitteln
                  tmpControl := FindControl(cwps.hwnd);

                  // Control gefunden ?
                  if Assigned(tmpControl) then begin

                     DebugMsg('CM_TEXTCHANGED '+tmpControl.ClassName);
                  end;               
               end;
            WM_SETTEXT :
               begin
                  // Control zu Handle ermitteln
                  tmpControl := FindControl(cwps.hwnd);

                  // Control gefunden ?
                  if Assigned(tmpControl) then begin

                     DebugMsg('WM_SETTEXT '+tmpControl.ClassName);
                  end;               
               end;
            WM_CREATE :
               begin
                  // Control zu Handle ermitteln
                  tmpControl := FindControl(cwps.hwnd);

                  // Control gefunden ?
                  if Assigned(tmpControl) then begin

                     DebugMsg('WM_CREATE '+tmpControl.ClassName);
                  end;
         end;
      end;
   end;
end;
Das WM_CREATE wird mir entsprechend ausgegeben, aber wenn ich z.B. die Caption eines TLabels ändere bekomme ich nichts mit
Ausser ein WM_PAINT glaube ich, aber da muss doch noch was anderes als Message kommen oder wird das bei TControl wirklich abhängig von der Klasse im Paint abgefackelt ?

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 25. Mai 2009, 13:17
Was genau hast du vor? Vielleicht gibt es ja eine bessere Möglichkeit. Auf den ersten Blick frage ich mich warum man sowas macht. Wenn du die Caption irgendwo per Quelltext änderst so hast du doch selbst den Quelltext dazu geschrieben und weißt auch das du etwas machst. Warum also nicht an der Stelle wo du etwas änderst darauf reagieren alsl ständig global alles zu überwachen?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 25. Mai 2009, 13:32
Zitat von DataCool:
Das WM_CREATE wird mir entsprechend ausgegeben, aber wenn ich z.B. die Caption eines TLabels ändere bekomme ich nichts mit
Logisch. TLabel basiert auf keiner Windowsfensterklasse wie zum Beispiel TButton. TLabel erbt von TGraphicControl und hat somit zum einen kein Handle und zum anderen wird es von der VCL gezeichnet und nicht von Windows. Deshalb bekommst du auch keine WM_SETTEXT Nachricht in deinm Hook.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 25. Mai 2009, 13:54
@SirThornberry:
Hört sich etwas komisch an, aber hinter dem "Unsinn" steckt Methode, oder auch nicht
Sinn und Zweck der Geschichte ist es eine Komponente zu Schreiben die eine Art von Multilanguagefähigkeit realisiert.
Bitte jetzt keine Diskusion über andere Ansätze, denn der Ansatz wurde mirt vorgegeben !
Ich gebe dem "User" die Möglichkeit in der Anwendung einen Translator-Modus zu aktivieren.
In diesem Modus kann der User die Komponenten die Übersetzt werden soll auswählen, indem er sie einfach anklickt.
Die Übersetzungen werden in einer XML Datei abgelegt und bei "CREATE" der Komponenten entsprechend gesetzt.
Wenn jetzt aber im Programm manuell eine Caption, Hint .. etc. geändert wird bekomme ich das nicht mit ....
Frage beantwortet ?

@Luckie:
Mir war es schon klar das TLabel kein Fensterhandle hat, aber es muss doch trotzdem eine Möglichkeit geben herraus zu bekommen,
wann z.B. die Caption geändert wurde, oder sehe ich das falsch ?

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 26. Mai 2009, 10:26
Hi,

habe jetzt noch ein wenig getestet und bin im Moment der Meinung,
das die Message:
"CM_Textchanged" genau das ist was ich brauche, allerdings wird diese nur intern in der VCL verwendet
und kommt nicht in meinem WndProc für Windows Messages an.
Hat jemand eine Idee wie ich diese Message Global in einer Anwendung abfangen kann ?
Oder muss ich jetzt zu jedem Control was mich interessiert die
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED; überschreiben ?

Bin für jede Anregung dankbar,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 23. Jul 2009, 15:46
*push*

Hat sich leider noch nicht erledigt

Ich brauche die Möglichkeit bei X Komponenten unterschiedlichen Typs,
einzige Gemeinsamkeit die Eigenschaften "Caption/Hint" sind verfügbar,
mitzubekommen wann sich eine der Eigenschaften(CapTion/Hint) ändert.

Bin für jede Idee/Anregung dankbar,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 23. Jul 2009, 15:50
für's Label: leite dir eine neue Komponente von TLabel ab und implementiere dir ein OnCaptionChange.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: Welche Windows Message beim Ändern der Eigenschaften Cap

  Alt 23. Jul 2009, 20:54
Hi Himitsu,

die Idee ist nicht schlecht, allerdings kann ich das nicht
auf ein bestehendes Projekt mit mehr als 1 Million Zeilen anwenden.

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 Uhr.
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