Icon mit LoadImageA() aus Resource laden [ERLEDIGT]

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Icon mit LoadImageA() aus Resource laden [ERLEDIGT]

Beitrag 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
Zuletzt geändert von Sören am Mi, 14. Dez 2011 9:18, insgesamt 1-mal geändert.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Icon mit LoadImageA() aus Resource laden

Beitrag 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
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Icon mit LoadImageA() aus Resource laden

Beitrag 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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Icon mit LoadImageA() aus Resource laden

Beitrag 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.
gruss by OHR
Jimmy
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Icon mit LoadImageA() aus Resource laden

Beitrag 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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Icon mit LoadImageA() aus Resource laden

Beitrag von georg »

Hallo, Sören -


die Methode heisst :gethWnd und ist in XbpWindow() definiert (und auch in der Dokumentation enthalten).


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Icon mit LoadImageA() aus Resource laden

Beitrag 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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Icon mit LoadImageA() aus Resource laden

Beitrag von georg »

Hallo, Sören -


sorry, ich ziehe meinen Einwand zurück. Ich hätte etwas genauer lesen sollen. :banghead:


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Icon mit LoadImageA() aus Resource laden

Beitrag 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
gruss by OHR
Jimmy
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Icon mit LoadImageA() aus Resource laden

Beitrag von Sören »

Jimmy,

vielen Dank!
Beste Grüße,
Sören
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Icon mit LoadImageA() aus Resource laden [ERLEDIGT]

Beitrag 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 ?
gruss by OHR
Jimmy
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Icon mit LoadImageA() aus Resource laden [ERLEDIGT]

Beitrag von Sören »

Hallo Jimmy,

vielen Dank. Das kann ich sehr gut gebrauchen!
Beste Grüße,
Sören
Antworten