Entwickler-Ecke
Windows API - Icon aus .dll in MessageBoxIndirect
NTcomputer - So 31.05.09 17:42
Titel: Icon aus .dll in MessageBoxIndirect
Ich versuche in den folgenden Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.MessageSucces(text:string); var MsgBoxParams:TMsgBoxParams; begin MsgBoxParams.cbSize := SizeOf(TMsgBoxParams); MsgBoxParams.hwndOwner := Self.Handle; MsgBoxParams.hInstance := GetWindowLong(Self.Handle, GWL_HINSTANCE); MsgBoxParams.lpszText := PChar(text); MsgBoxParams.lpszCaption := 'Vorgang erfolgreich beendet'; MsgBoxParams.lpszIcon:= MsgBoxParams.dwStyle := MB_USERICON or MB_OK; MessageBoxIndirect(MsgBoxParams); end; |
ein eigenes Icon einzubauen, was ja normalerweise über MAKEINTRESOURCE(RESOURCEID) kein Problem ist.
Nur habe ich das Icon nicht in der Unit sondern in einer externen DLL als Resource.
Das Laden des Icons aus der Resource in ein TIcon der Unit funktioniert, nur was muss ich jetzt dem MsgBoxParams.lpszIcon zuweisen, damit er auch das Icon anzeigt??
Hoffe mir kann jemand helfen!
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am So 31.05.2009 um 23:56
jaenicke - So 31.05.09 17:52
Da musst du als Instanz das Modul angeben, du musst also die DLL laden und deren Handle dann als Instanz angeben, der Rest sollte dann normal funktionieren, indem du den Namen der Ressource angibst.
Ausprobiert habe ich das nicht, aber so würde ich es vermuten.
// EDIT:
Dazu steht ja auch was in der Dokumentation...
http://msdn.microsoft.com/en-us/library/ms645402.aspx
NTcomputer - So 31.05.09 18:26
Danke für deine schnelle Antwort,
ich vermute, du meinst das so?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var MsgBoxParams:TMsgBoxParams; dllres:HINST; begin dllres:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'imageres.dll')); MsgBoxParams.cbSize := SizeOf(TMsgBoxParams); MsgBoxParams.hwndOwner := self.Handle; MsgBoxParams.hInstance := GetWindowLong(dllres, GWL_HINSTANCE); MsgBoxParams.lpszText := PChar(text); MsgBoxParams.lpszCaption := 'Vorgang erfolgreich beendet'; MsgBoxParams.lpszIcon:=MAKEINTRESOURCE(101); MsgBoxParams.dwStyle := MB_USERICON or MB_OK; MessageBoxIndirect(MsgBoxParams); FreeLibrary(dllres); end; |
Das klappt nur nicht richtig, keine Ahnung wieso, aber er nimmt das 101. Standardicon (glaube ich), jedenfalls nicht das was in der DLL ist. Muss ich das Handle noch irgendwie anders angeben?
Delete - Mo 01.06.09 00:36
MsgBoxParams.hInstance :=dllres;
Probier es mal so.
NTcomputer - Mo 01.06.09 09:55
Danke!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!