Autor Beitrag
Crowbar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: So 07.07.02 17:05 
Hallo,
ich möchte ein Programm schreiben, dass, wenn die Maus über z.B. Editierfelder, Eingabefelder, Memofelder etc. von fremden Programmen sich befindet, den Text-Font ausliest.
Mit den untenstehenden Code kann ich den unter dem Mauszeiger befindlichen Text-Font nur bedingt auslesen. Denn dies klappt leider nur z.B. mit dem gewöhnlichen Texteditor ("NotePad") oder bei dem Eingabefeld der Internetadresse im Internet-Explorer.
Aus irgendeinen Grund klappt es nicht in "grösseren" Schreibprogrammen, wie z.B. "Word" oder auch im "Delphi-Editor"!

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
Type
  pmeFont  = ^mFont;
  mFont     = record
                     szFont : tagLOGFONT;
                   end;

Var
  cp             : TPoint;
  hDefFont    : HFONT;
  hMemoEdit : HWND;
  meFont      : pmeFont;
 myHandle   : Integer;
  NameFont  : String;

Procedure TForm1.ButtonClick(Sender: TObject);
begin
   GetCursorPos(cp);
   myHandle:=WindowFromPoint(cp);

  NameFont:='kein Zeichensatzname';
   GetMem(meFont,sizeof(tagLOGFONT));
   if myHandle <> 0 then
    begin
       hMemoEdit:=GetWindow(myHandle,GW_HWNDFIRST);
       hDefFont   :=SendMessage(hMemoEdit,WM_GETFONT,0,0);
       if hDefFont <> 0 then
         begin
            GetObject(hDefFont,sizeof(tagLOGFONT),meFont);
            NameFont:='Zeichensatzname: '+meFont.szFont.lfFaceName;
         end;
    end;
  FreeMem(meFont);
end;


Hat jemand eine Idee woran dies liegen kann?
Bye Crowbar
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: So 07.07.02 18:03 
Ja. Dein Code versucht, das dem Control zugrunde liegende Font-Objekt auszulesen. Das funktioniert bei den Common Controls natürlich ohne Probleme.
Sowohl die meisten Entwicklungsumgebungen als auch die meisten Textverarbeitungen verwenden für die Texteingabe jedoch kein Standard-Control. Textverarbeitungen müssen verschiedene Schriftarten anzeigen, deshalb müssen sie das intern regeln und können nicht einfach ein Font-Objekt zuweisen. Entwicklungsumgebungen verwenden für das Syntaxhighlighting ein eigenes System, weil es z.B. mit RichEdit viel zu langsam und umständlich ist.
Vermutlich wirst du ohne weiteres also nicht die Schriftarten aus solchen Programmen auslesen können.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.