![]() |
unti shellobj und WM_ message
hi, ich hab folgfendes problem, ich will eine WM_ message einbinden (WM_CLOSE), habe aber eine prozedur, die die unit shellobj benötigt, nun sagt delphi aber immer, die deklaration der message-proc sei nicht richtig geforwarded....
wenn ich die shellobj nicht mit einbinde läuft aber alles mit den messages.... kennt einer ne lösung, bei der ich beides nutzen kann? |
Re: unti shellobj und WM_ message
Was gebräuchlich ist:
Delphi-Quellcode:
Die Unit "ShellObj" kenn ich jetzt nicht (denk ich mal :gruebel: ). Es wäre Sinnvoll wenn du noch sagst um welche Function/Procedur es sich handelt.
uses
Windows, Messages, ShellAPI // Edit: Achso, du meinst wohl die Unit "ShlObj". ? |
Re: unti shellobj und WM_ message
ob eine Procedure richtig geforwardet wird hängt nicht davon ab welche Units eingebunden sind.
|
Re: unti shellobj und WM_ message
Stimmt.
Aber ohne genauere Infos kann man schlecht etwas sagen. :mrgreen: |
Re: unti shellobj und WM_ message
stimmt, die heißt ShlObj wird benötigt von:
Delphi-Quellcode:
so, wenn ich die nicht einbinde, dann läuft alle ok, wenn se aber eingebunden ist, dann bringt er bei
function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var pMalloc: IMalloc; pidl: PItemIDList; Path: PChar; begin // get IMalloc interface pointer if (SHGetMalloc(pMalloc) <> S_OK) then begin MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.', 'SHGetMalloc(pMalloc)', 16); Exit; end; // retrieve path SHGetSpecialFolderLocation(hWindow, Folder, pidl); GetMem(Path, MAX_PATH); SHGetPathFromIDList(pidl, Path); Result := Path; FreeMem(Path); // free memory allocated by SHGetSpecialFolderLocation pMalloc.Free(pidl); end;
Delphi-Quellcode:
die meldung: [Fehler] main.pas(70): E2065 Ungenügende Forward- oder External-Deklaration: 'Tshutdown_061025.WMclose'
procedure WMclose(var Msg:TMessage);message WM_CLOSE;
|
Re: unti shellobj und WM_ message
Dann setze doch mal die Procedure WMClose() ein paar zeilen weiter oben in deinem Code oder
stelle mit
Delphi-Quellcode:
vorran.
program Project1;
procedure GetTest(param: char); forward; // <--<<< procedure BevoreTest; begin GetTest(#0); end; procedure GetTest(param: char); begin end; begin //... end. Arbeitest du mit der VCL / OOP ? |
Re: unti shellobj und WM_ message
also das forward geht irgendwie nicht.....
der code sieht so aus, und geht nich, hab die procedur schon so weit wie möglich nach oben gesetzt:
Delphi-Quellcode:
ich arbeite mit VCL
procedure WMclose(var Msg:TMessage);message WM_CLOSE;
procedure Abmelden1Click(Sender: TObject); procedure Ruhezustand1Click(Sender: TObject); procedure Standby1Click(Sender: TObject); procedure Neustart1Click(Sender: TObject); procedure Herunterfahren1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Prozessbeenden1Click(Sender: TObject); procedure Computersperren1Click(Sender: TObject); procedure Abmelden3Click(Sender: TObject); procedure Neustart3Click(Sender: TObject); procedure Herunterfahren3Click(Sender: TObject); procedure Abmelden2Click(Sender: TObject); procedure Neustart2Click(Sender: TObject); procedure Herunterfahren2Click(Sender: TObject); procedure Ruhezustand3Click(Sender: TObject); procedure Standby3Click(Sender: TObject); procedure Standby2Click(Sender: TObject); procedure PopupMenu1Popup(Sender: TObject); procedure Ruhezustand2Click(Sender: TObject); procedure Einstellungen1Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure TrayDblClick(Sender: TObject); procedure showtimer(art : tdown); private closable : boolean; public procedure shutdown(typ : Tdown); end; var shutdown_061025: Tshutdown_061025; implementation uses hib, ShlObj; {$R *.dfm} function SetSuspendState(Hibernate,ForceCritical,DisableWakeEvent:boolean):boolean;stdcall; external 'powrprof.dll'; function IsPwrSuspendAllowed():boolean;stdcall; external 'powrprof.dll'; function IsPwrHibernateAllowed():boolean;stdcall; external 'powrprof.dll'; function LockWorkStation():boolean;stdcall; external 'User32.dll'; procedure WMclose(var Msg:TMessage); begin Showmessage('ok'); end; wenn ich da n forward stehen hab, passt dann da noch n "message WM_CLOSE" hin? |
Re: unti shellobj und WM_ message
Na dann...
Ggf. Fehlt ja nur ein TForm1.WMClose... etc. |
Re: unti shellobj und WM_ message
:wall: ja ok, die woche war lang=)
is nur die frage, warum es trotzdem geht, wenn die unit nicht eingebunden ist |
Re: unti shellobj und WM_ message
es wird dann vermutlich klappen weil die entsprechende Forwarddeclaration wo anders vorhanden ist etc. bzw. durch einen Namenskonflikt durch die ShlObj alles nicht mehr klappt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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