AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Fenster anhand Handle subclassen
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster anhand Handle subclassen

Ein Thema von Marphy · begonnen am 4. Jul 2005 · letzter Beitrag vom 4. Jul 2005
 
Olli
(Gast)

n/a Beiträge
 
#3

Re: Fenster anhand Handle subclassen

  Alt 4. Jul 2005, 19:53
Der Source der Fensterfunktion wäre hier wichtig.

Ansonsten geht es etwa so:SetWindowLong(hwnd, GWL_USERDATA, SetWindowLong(hwnd, GWL_WNDPROC, @WndProc)); Wir bekommen damit in user data die Adresse der ursprünglichen Fensterfunktion, wobei die neue direkt damit gesetzt wird.

Das Defaulthandling übernimmt dann in deiner WndProc die alte Fensterfunktion dank:result := CallWindowProc({hier muß ein Cast hin ->}GetWindowLong(hwnd, GWL_USERDATA), ...); Habe den o.g. Cast nicht im Kopf, sorry. Wahrscheinlich "Pointer()" ...?!

Nachtrag:
Du kannst die beiden obigen Aufrufe von SetWindowLong() auch aufdröseln, damit es threadsafe wird. Dazu müßtest du dann wohl sowas hier machen:
Delphi-Quellcode:
SetWindowLong(hwnd, GWL_USERDATA, GetWindowLong(hwnd, GWL_WNDPROC));
SetWindowLong(hwnd, GWL_WNDPROC, @WndProc);
Statt GWL_USERDATA kannste auch was anderes sinnvolles oder z.B. SetProp/GetProp benutzen.

Noch'n Nachtrag:
Wahrscheinlich MUSST du sogar die letzte Variante nehmen, weil beim geschachtelten SetWindowLong() der Fall eintreten könnte, daß deine eigene Funktion gesetzt ist und durch eine externe Message aufgerufen wird, während der Wert in GWL_USERDATA (oder wo auch immer) noch nicht gesetzt ist. Dieser wird aber benötigt, damit die alte Fensterfunktion aufgerufen werden kann.
  Mit Zitat antworten Zitat
 


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 04:15 Uhr.
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