Seite 1 von 1
Icon mit LoadImageA() aus Resource laden [ERLEDIGT]
Verfasst: Mo, 12. Dez 2011 11:04
von Sören
Hallo,
ich möchte mittels der Windows-API-Funktion LoadImageA() ein Icon
laden, dass als Resource an eine EXE-Datei gebunden ist.
Das Laden einer Icon-
Datei mit LoadImageA() funktioniert bestens:
Code: Alles auswählen
nImageHandle := DllCall( "USER32.DLL", DLL_STDCALL, "LoadImageA", oDlg:gethWnd(), "Test.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE + LR_DEFAULTSIZE )
Was ich nicht hinbekomme ist das Laden einer Icon-Resource, die in einer Arc-Datei definiert ist:
Code: Alles auswählen
ICON
ICON_DIR_CLOSE = "Dir_Close.ico"
ICON_DIR_OPEN = "Dir_Open.ico"
ICON_SYSTEM = "System.ico"
Wie kann ich z.B. die Resource ICON_DIR_CLOSE mit LoadImageA() laden?
Geht das überhaupt?
Mit besten Grüßen,
Sören
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Mo, 12. Dez 2011 11:13
von Martin Altmann
Sören,
hilft Dir das hier weiter
http://www.xbaseforum.de/viewtopic.php?f=26&t=2161
Viele Grüße,
Martin
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Mo, 12. Dez 2011 11:33
von Sören
Nein, Martin, das hilft mir leider nicht.
Ich weiß natürlich wie man eine ICON-Resource mit Xbase-Boardmitteln lädt.
Doch ich möchte die Resource mittels LoadImageA() laden, da ich das Handle auf
das Image, welches diese Funktion zurückliefert, zur Weiterverabeitung benötige.
Beste Grüße,
Sören
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Mo, 12. Dez 2011 20:22
von AUGE_OHR
Sören hat geschrieben:ich möchte mittels der Windows-API-Funktion LoadImageA() ein Icon
laden, dass als Resource an eine EXE-Datei gebunden ist.
Das Laden einer Icon-
Datei mit LoadImageA() funktioniert bestens:
Code: Alles auswählen
nImageHandle := DllCall( "USER32.DLL", DLL_STDCALL, "LoadImageA", oDlg:gethWnd(), "Test.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE + LR_DEFAULTSIZE )
Was ich nicht hinbekomme ist das Laden einer Icon-Resource, die in einer Arc-Datei definiert ist:
klar geht das wenn du nicht LR_LOAD
FROMFILE benutzt, aber warum machst du dir das so kompliziert ?
es gibt doch XbpIcon(), als Source, und das benutzt
LoadImageA() und mit
o:GetHandle() bekommst du dein nImageHandle.
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Di, 13. Dez 2011 10:07
von Sören
Hallo Jimmy,
danke für Deine Antwort. Die Methode :GetHandle() von XbpIcon kannte ich noch nicht.
Das ist genau das, was ich brauche!
Ich kann die Methode allerdings nicht in der Xbase-Hilfe finden und testen kann ich es
im Moment auch nicht. Bist Du Dir sicher, dass diese Methode existiert?
Beste Grüße,
Sören
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Di, 13. Dez 2011 12:47
von georg
Hallo, Sören -
die Methode heisst :gethWnd und ist in XbpWindow() definiert (und auch in der Dokumentation enthalten).
Gruss,
Georg
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Di, 13. Dez 2011 12:55
von Sören
Hallo Georg,
die Methode :gethWnd() ist mir bekannt; sie gibt das Handle des jeweiligen Fensters zurück.
Ich verwende sie sogar in dem oben geposteten Funktionsaufruf.
Doch was ich benötige ist das System-Handle des geladenen Icons, das ich einer
anderen Win-API-Funktion übergeben muss.
Beste Grüße,
Sören
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Di, 13. Dez 2011 13:25
von georg
Hallo, Sören -
sorry, ich ziehe meinen Einwand zurück. Ich hätte etwas genauer lesen sollen.
Gruss,
Georg
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Di, 13. Dez 2011 18:32
von AUGE_OHR
Sören hat geschrieben:danke für Deine Antwort. Die Methode :GetHandle() von XbpIcon kannte ich noch nicht.
Das ist genau das, was ich brauche!
Ich kann die Methode allerdings nicht in der Xbase-Hilfe finden und testen kann ich es
im Moment auch nicht. Bist Du Dir sicher, dass diese Methode existiert?
sorry, die
IVar heisst
::Handle und die Method GetHandle() hab ich wohl zum Source in C:\ALASKA\XPPW32\Source\SYS\xbparts.prg dazu geschrieben.
Nachtrag : ich "glaube" das ich die Method GetHandle() dazugeschrieben habe weil die Ivar ::
Handle "protected" war und man die deshalb "von aussen" nicht abfragen konnte
Re: Icon mit LoadImageA() aus Resource laden
Verfasst: Mi, 14. Dez 2011 9:17
von Sören
Jimmy,
vielen Dank!
Re: Icon mit LoadImageA() aus Resource laden [ERLEDIGT]
Verfasst: Do, 15. Dez 2011 20:30
von AUGE_OHR
hi,
wenn du dich schon an die XbpIcon Class machst könntest du das vielleicht auch gebrauchen
Code: Alles auswählen
* #define SHGFI_ICON 0x100 // normales Icon
* #define SHGFI_OPENICON 0x2 // das Icon fr ge”ffnete Ordner
* #define SHGFI_SELECTED 0x10000 // selektiertes Icon
* #define SHGFI_SMALLICON 0x1 // klein (meist 16x16)
* #define SHGFI_LARGEICON 0x0 // groá (meist 32x32)
* #define SHGFI_SHELLICONSIZE 0x4 // wie auf Desktop
* #define SHGFI_USEFILEATTRIBUTES 0x10
* #define SHGFI_SYSICONINDEX 0x00004000
INLINE METHOD LoadFileIcon( cFile, cFileAttributes, lBigIcon )
LOCAL pBuf
LOCAL nFlags
LOCAL nFileAttributes := 0
DEFAULT lBigIcon TO .T.
IF ::Status() != XBP_STAT_CREATE
Exception():RaiseObjectState()
ENDIF
IF ::Handle != 0
@user32:DestroyIcon( ::Handle )
ENDIF
IF !FILE(cFile)
RETURN 0
ENDIF
IF lBigIcon == .T.
nFlags := nOr(SHGFI_ICON,SHGFI_LARGEICON)
ELSE
nFlags := nOr(SHGFI_ICON,SHGFI_SMALLICON)
ENDIF
IF cFileAttributes != NIL /* .AND. ! ".exe" $ lower( cFile ) */ // Will man das individuelle
nFlags := nOr(nFlags,SHGFI_USEFILEATTRIBUTES)
IF "D" $ cFileAttributes
nFileAttributes := FILE_ATTRIBUTE_DIRECTORY // 0x10
ELSE
nFileAttributes := FILE_ATTRIBUTE_NORMAL // 0x80
ENDIF
ENDIF
pBuf := Replicate( Chr(0), 352 )
IF @SHELL32:SHGetFileInfoA(cFile, nFileAttributes, @pBuf, 352, nFlags) == 0
RETURN 0
ENDIF
// Handle of Ico
::Handle := Bin2L( Left(pBuf,4) )
// XbpIcon
::GetIconInfo()
RETURN (::Handle)
füge das in deine XbpIcon Class ein.
damit bekommst du von jedem "cFile" das System Icon / Handle
p.s. nOR() ist ot4xb, in Xbase++ müsste es bOR() sein ?
Re: Icon mit LoadImageA() aus Resource laden [ERLEDIGT]
Verfasst: Fr, 16. Dez 2011 8:50
von Sören
Hallo Jimmy,
vielen Dank. Das kann ich sehr gut gebrauchen!