AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Application.HideHint ändern

Ein Thema von ConnorMcLeod · begonnen am 22. Feb 2015 · letzter Beitrag vom 22. Feb 2015
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

Application.HideHint ändern

  Alt 22. Feb 2015, 09:11
Hallo Kollegen,
vllt steh ich gerade fest aufm Schlauch, aber ... weshalb bringt D2010 einen E2089 bei TMethod(Application.HideHint).Code := MyAppHideHint.Code; ?
Ich möchte die HideHint-Prozedur ändern, um zusätzlich selbst darauf reagieren zu können, wenn das HintFenster ausgeblendet wird.
Wie immer danke für alle Ideen + fg
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 10:37
Weil der Compiler endlich mal schauler ist, als du. (früher wurde sowas einfach noch nicht bemängelt)

Es wird das Propert HideHint ausgelesen und du versuchst in der ausgelesenen Kopie dieses Records ein Feld zu ändern.
Und nein, es wird ausschließlich der Getter aufgerufen, da du ja einen bestehenden Wert teilweise ändern willst, aber es wird nacher nicht mehr per Setter zurückgespeichert.


[edit] HideHint ist eine Methode und dann noch nichtmal virtuell ... das kann so oder so garnicht funktionieren.
$2B or not $2B

Geändert von himitsu (22. Feb 2015 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 11:06
Stimmt, es ist eine Methode und kein Property.
Daher sollte der Cast auf TMethod funktionieren. Tut er aber nicht. Und das wundert mich, da ich auf diese Art öfter das Verhalten von Methoden ändere. Und dort geht das.

Das ist übrigens kein schmutziger Trick, sondern funktioniert mit den Bordmitteln ganz legal. Der Record TMethod ist für Zwecke wie diesen gemacht.

[virtual] käme dann zum Tragen, wenn ich [override] verwendete. Tu ich aber nicht, weil ich nicht kann, weil es nicht [virtual] ist Sonst wäre das ganze Problem kein Problem.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 11:13
Daher sollte der Cast auf TMethod funktionieren. Tut er aber nicht.
Ja, zum Auslesen und das funktioniert auch.
Also man kann die "Adresse" auslesen und z.B. casten oder an eine Event-Variable übergeben.

Und was mich nicht wundert: Man kann das natürlich nicht zurückschreiben oder ändern ... wohin auch?
Das geht maximal mit einem bösen Hook.


Seit XE, XE2 oder XE3 (k.A.) kann man man sich in virtuale Methoden auch mit einen Interceptor reinhängen.
Delphi-Referenz durchsuchenTVirtualMethodInterceptor
Und vorher konnte man sich auch böswillig und manuell an der VMT zu schaffen machen.
$2B or not $2B

Geändert von himitsu (22. Feb 2015 um 11:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 11:27
Delphi-Quellcode:
var
  lpDummy: Pointer;
begin
  lpDummy := TMethod(Application.HideHint).Code;
funktioniert nicht und resultiert in:
Code:
[DCC Fehler] E2089 Ungültige Typumwandlung
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 11:30
In der TNTWare-Controls gibts doch Helperfunktionen um solche Hooks korrekt zu setzen.
Für Funktionen funktioniert es (z.B. ersetzen von Format-Befehl um unter D6 den Bufferfehler zu umgehen). Evtl. funktioniert das auch hier
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 11:46
Danke für den Tip, ich möchte möglichst ohne ZusatzTools auskommen.
Mein Weg wird wohl sein, eine eigene THintWindow-Klasse zu erstellen, dort ShouldHideHint zu überschreiben und mir darin selbst eine Message zu posten.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 11:53
Eventuell auch TApplicationEvents.OnMessage und auf WM_DESTROY des HintWindows reagieren.
Oder, da die HintWindows-Klasse eine TComponent ist, sich beim Anzeigen dranhängen (Delphi-Referenz durchsuchenTComponent.FreeNotification).

Direkte Events/Messages, beim Ausblenden des Hints, hab ich auch nicht entdecken können.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 11:56
Das hatte ich ausprobiert und mglw etwas übersehen, aber es scheint so, daß das Hintfenster nicht zerstört wird, sondern nur versteckt. Leider.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Application.HideHint ändern

  Alt 22. Feb 2015, 13:00
WM_CLOSE, CM_VISIBLECHANGED usw.
$2B or not $2B
  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 02: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