Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Application.HideHint ändern (https://www.delphipraxis.net/184055-application-hidehint-aendern.html)

ConnorMcLeod 22. Feb 2015 12:08

AW: Application.HideHint ändern
 
Wie ich schon schrieb ... Message abfangen funkt leider nicht.

Dalai 22. Feb 2015 13:54

AW: Application.HideHint ändern
 
Schau dir vielleicht mal die Units NativeHintWindow und FastCodePatch (bzw. Cromis.Detours) an. Beide ändern in Zusammenarbeit miteinander die Delphi-Hints in native und "patchen" dabei Application.HideHint.

MfG Dalai

ConnorMcLeod 22. Feb 2015 14:42

AW: Application.HideHint ändern
 
Das sieht doch mal gut aus :thumb:
Daß dabei TApplication.HideHint als einzige Methode derart gepatcht werden muß bekräftigt mich in der Annahme, daß in diesem Fall die üblichen Mittel tatsächlich nicht ausreichen.
Danke sehr!

himitsu 22. Feb 2015 14:55

AW: Application.HideHint ändern
 
Aber es ist letztendlich doch nur ein "Windows"?

Dann müsste es eigentlich viele Messages geben, welche von und an das Ding gehen. :gruebel:

ConnorMcLeod 22. Feb 2015 17:53

AW: Application.HideHint ändern
 
IIUC ist es kein ausgewachsenes Fenster, sondern "nur" ein TWinControl. Ich vermute, daß Windoof ein Tooltip-Window erzeugt und Delphi das THintWindow (das zwar Window heißt, aber kein TCustomForm ist) darin einbaut um die Anzeige zu malen.

Es würde mich zwar akademisch interessieren, wie der Mechanismus tatsächlich abläuft, aber die Zeit dafür bezahlt niemand :-/

Ich bin momentan happy mit der eigenen THintWindow-Klasse und werde mglw den FastcodeAddressPatch verwenden, um applikationsweit nur eine einzige Prozedur zu haben, die dann mittels Interface verschiedene THintWindow-Klassen bedienen kann.

himitsu 22. Feb 2015 20:20

AW: Application.HideHint ändern
 
Alles was Windows anzeigt, sind "Fenster" ... selbst ein TEdit (EDIT) oder ein TButton (BUTTON) sind nur Fenster, die in das große Top-Level-Fenster eingebettet sind.
Und jedes WinControl wird über Messages kontrolliert.

http://stackoverflow.com/questions/9...2-edit-control

ConnorMcLeod 22. Feb 2015 20:24

AW: Application.HideHint ändern
 
Schon klar, deswegen waren die MessageHandler meine erste Idee; THintWindow wird offenbar dennoch anders behandelt. Schon mal selbst probiert?

himitsu 22. Feb 2015 20:56

AW: Application.HideHint ändern
 
Delphi-Quellcode:
procedure TForm2.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
  C: TWinControl;
begin
  C := FindControl(Msg.hwnd);
  if C is HintWindowClass then begin
    Tag := Tag + 1;
    Caption := IntToStr(Tag);
  end;
end;
Hmmmmm, also entweder hostet Windows die HintWindows extern, was aber nicht gehen kann, denn irgendwo muß das WM_PAINT des HintWindows vorbeikommen, denn als ich zuletzt eine eigene Hint-Klasse schrieb, da ist das noch angekommen (in der Klasse).
Oder man muß auf irgendwas Anderes hören, oder Delphi fängt die HintMessages ab, bevor sie beim OnMessage vorbeikommen. :gruebel:

Delphi-Quellcode:
  THintWindow = class(TCustomControl)
  protected
    procedure Paint; override;
    procedure WMPrint(var Message: TMessage); message WM_PRINT;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.
Seite 2 von 2     12   

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