Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

HICON im Program anzeigen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 14.03.2016, 09:52    Titel: HICON im Program anzeigen Antworten mit Zitat

Hallo Leute.

Ich verknote mir seit 3 tagen die Finger beim Versuch ein Icon von einem fremden Program zu laden und in meinem Program anzuzeigen.

Also für Titel- und Taskleiste gibt es ja einige Bsp. und auf dem Portal schöne API Tutorials. Dort werden zwar auch Icons im Program angezeigt, allerdings glaub ich über Callbackfunktionen. Das möchte ich nicht unbedingt.

Das hier funktioniert soweit
Code:

#include Once "windows.bi"
#include once "win\shellapi.bi"
#include Once "fbgfx.bi"

Dim As Word         nicon = 1
Dim As HINSTANCE hInstance=GetModuleHandle(NULL)
Dim As HICON      icon
icon = ExtractAssociatedIcon(hInstance,StrPtr("E:\FreeBasic\Program\fbide.exe"),@nicon)


nun habe ich gehofft das ich das irgendwie so laden könnte das ich es mit Put anzeigen kann.
zB:
Code:
Dim As Any Ptr bild = loadImage(hInstance,icon,IMAGE_ICON,NULL,NULL,LR_DEFAULTSIZE)

funktioniert natürlich nicht

Wie kann ich das bewerkstelligen

EDIT:

habe noch das hier gefunden, zeichnet aber leider nur direkt auf ein Gerät und nicht in ein Fenster
Code:
Dim As HDC   hdc1
DrawIconEx( hdc1, 10, 10, icon, 32, 32, 0, NULL, DI_NORMAL )

_________________
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win64 (64bit)
OS: Windows NT 6.2 (build 9200)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.03.2016, 13:09    Titel: Antworten mit Zitat

Um aus einem WinAPI-Bild die rohen Pixelwerte auszulesen gibt es mehere Möglichkeiten, z.B. GetDIBits.
Beispiel
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 14.03.2016, 13:48    Titel: Antworten mit Zitat

Na erstmal vielen Dank Jojo

Das werde ich mir jetzt mal gleich ansehen. Ich bin bis jetzt bis zum folgenden Code gekommen. Dieser schmiert zwar nicht ab bringt aber auch kein Ico zum vorschein weinen

Code:
#include Once "windows.bi"
#include once "win\shellapi.bi"
#include Once "fbgfx.bi"

screenres 300, 300, 32

'' Fenster handle
dim as HWND     mHwnd
ScreenControl( FB.GET_WINDOW_HANDLE, cast(integer,mHwnd) )

'' Icon Laden
dim as Word     nicon = 1
dim as HINSTANCE hInstance=GetModuleHandle(NULL)
dim as HICON    icon = ExtractAssociatedIcon(hInstance,StrPtr("E:\FreeBasic\Program\fbide.exe"),@nicon)

'' BitMap erstellen
dim as HDC      mHdc    = GetDC(mHwnd)
dim as HDC      hdcComp =CreateCompatibleDC(mHdc)
dim as HBITMAP  bitmap  =CreateCompatibleBitmap(mHdc, 64,64)
dim as PAINTSTRUCT ps

SelectObject(hdcComp, bitmap)

'' Icon in die Bmp zeichnen
DrawIconEx( hdcComp, 10, 10, icon, 32, 32, 0, NULL, DI_NORMAL )

mHdc=BeginPaint(mHwnd,@ps)'Beginn des Zeichenvorgangs
  BitBlt(mHdc, 0,0,64,64,hdcComp, 0,0,SRCCOPY)'Fertiges Bild wird auf den Bildschirm gebracht
EndPaint(mHwnd, @ps)'Ende des Zeichenvorgangs

DestroyIcon(icon)
DeleteDC(hdcComp)
DeleteObject(bitmap)

getkey

_________________
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win64 (64bit)
OS: Windows NT 6.2 (build 9200)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.03.2016, 14:11    Titel: Antworten mit Zitat

FreeBASIC hat seinen eigenen Backbuffer, da kannst du nicht einfach so mit der WinAPI draufzeichnen. Du wirst mit dem Ansatz allerhöchstens ein flackerndes Icon zustande bekommen (wenn überhaupt), da es gegen die Redraws von FreeBASIC selbst anzukämpfen hat. Deswegen: Pixeldaten des HICONs auslesen und in einen FreeBASIC-Bildpuffer packen.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 14.03.2016, 14:44    Titel: Antworten mit Zitat

Supi also nochmal vielen Dank Jojo, ich hab es hinbekommen.

Falls ich noch irgendwas vergessen habe um Speicher freizugeben, bitte ergänzen. Und sonstige Verbesserungsvorschläge sind natürlich willkommen.

Code:
#include Once "windows.bi"
#include once "win\shellapi.bi"
#include Once "fbgfx.bi"


screenres 300, 300, 32

'' Fenster handle
dim as HWND     mHwnd
ScreenControl( FB.GET_WINDOW_HANDLE, cast(integer,mHwnd) )

'' Icon Laden
dim as Word     nicon = 1
dim as HINSTANCE hInstance=GetModuleHandle(NULL)
dim as HICON    icon = ExtractAssociatedIcon(hInstance,StrPtr("E:\FreeBasic\Program\fbide.exe"),@nicon)
dim as ICONINFO iInfo
GetIconInfo(icon,@iInfo) '' iInfo.xHotSpot = 16 / iInfo.yHotSpot = 16

'' BitMap erstellen
dim as HDC      mHdc    = GetDC(mHwnd)
dim as HDC      hdcComp =CreateCompatibleDC(mHdc)
dim as HBITMAP  bitmap  =CreateCompatibleBitmap(mHdc, 32,32)

SelectObject(hdcComp, bitmap)

dim as BITMAPINFO bmi
  With bmi.bmiHeader
   .biSize = SizeOf(BITMAPINFOHEADER)
   .biWidth =  32         'breite
   .biHeight = -32        '-hoehe (sonst Kopfstand)
   .biPlanes = 1
   .biCompression = BI_RGB
   .biBitCount = 32
  End With


'' Icon in die Bmp zeichnen
DrawIconEx( hdcComp, 0, 0, icon, 32, 32, 0, NULL, DI_NORMAL )

'' fbImage erstellen
dim as any Ptr  meinIco = imageCreate( 32 , 32 )
GetDIBits(hdcComp, bitmap, 0, 32, meinIco + 32, @bmi, DIB_RGB_COLORS)

screenLock
  put(10,10),meinIco,pset
screenUnlock

ImageDestroy(meinIco)
DestroyIcon(icon)
DeleteDC(hdcComp)
DeleteObject(bitmap)

getkey

_________________
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win64 (64bit)
OS: Windows NT 6.2 (build 9200)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 14.03.2016, 14:45    Titel: Antworten mit Zitat

Das hier könnte dazu nützlich sein:
https://forum.qbasic.at/viewtopic.php?t=7403

//edit: sehe grad du hast es schon hinbekommen
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.03.2016, 16:07    Titel: Antworten mit Zitat

braesident hat Folgendes geschrieben:
Falls ich noch irgendwas vergessen habe um Speicher freizugeben, bitte ergänzen.

Zu jedem GetDC gehört das passende ReleaseDC.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz