![]() |
SetProp und Self
Hi,
Beim erstellen einer Klasse versuche ich Self an das Fenster zu heften.
Delphi-Quellcode:
So ungefähr sieht das ganze aus. In einer Procedure (keine Methode dieser Klasse) versuch ich auf Self so zuzugreifen:
var hg: HGLOBAL;
dat: Pointer; begin hg := GlobalAlloc(GPTR,SizeOf(Self)); dat := GlobalLock(hg); CopyMemory(dat,Self,SizeOf(Self)); GlobalUnlock(hg); SetProp(FHandle,MakeIntAtom(SelfAtom),hg); end;
Delphi-Quellcode:
Also GetProp liefert mir was zurück.. Damit kann ich auch mehr oder weniger arbeiten. Aber eher weniger. Ich kann Methoden von Self aufrufen aber innerhalb dieser Methoden ist Self dann totaler Unsinn. Wahrscheinlich schon vorher... Aber Methoden aufrufen geht irgendwie...
function WndProcDispatch(wnd: HWND; Msg: UINT; lp: LPARAM; wp: WPARAM): LResult; stdcall;
var Self: TNVCLForm; begin Integer(Self) := GetProp(wnd,MakeIntAtom(SelfAtom)); // Weitere Operationen mit Self // .. end; Ich schätze ich mache irgendwas falsch beim Setzen der Property. Wäre froh wenn sich das jemand mal angucken könnte ;) Gruß Neutral General |
Re: SetProp und Self
Erstmal sagt es gar nichts aus, dass du (statische) Mathoden aufrufen kannst, da diese eh wie normale Routinen aufgerufen werden.
Zweitens: Warum verwendest du überhaupt GlobalLock? Mit GPTR erhältst du doch schon einen Pointer als Rückgabewert von GlobalAlloc. 3. Wenn du weißt, dass du Self speichern musst, würde ich persönlich lieber die zusätzlichen Bytes verwenden, die du in der WndClassEx-Struktur im Feld cbWndExtra angeben kannst. Das ist jedoch nur meine private Meinung. So jetzt habe ich viel geschrieben, ohne dein Problem zu lösen. Hast du mal die Rückgabetypen der ganzen Funktionen geprüft? GetLastError? |
Re: SetProp und Self
Hi,
Die Funtkionen sind alle ok. Du hast ja diese Möglichkeit mit cbWndExtra angesprochen. Wie würde ich denn diese Daten abrufen können? Gruß Neutral General |
Re: SetProp und Self
In TWndClassEx gibst du nur die Größe an, also wie viel Speicher pro Fenster reserviert wird. Zum Zugriff wird Get- und SetWindowLong verwendet.
|
Re: SetProp und Self
Das MakeProcInstance dürfte aber auch sehr gut als WndProcDispatcher funktionieren :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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 by Thomas Breitkreuz