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 :?: :arrow: 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_LOADFROMFILE 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. :banghead:


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 fr 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!