| 
				
					|  | Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| braesident 
 
 
 Anmeldungsdatum: 15.04.2008
 Beiträge: 189
 Wohnort: Berlin
 
 | 
			
				|  Verfasst am: 14.03.2016, 09:52    Titel: HICON im Program anzeigen |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| Jojo alter Rang
 
  
 Anmeldungsdatum: 12.02.2005
 Beiträge: 9736
 Wohnort: Neben der Festplatte
 
 | 
			
				|  Verfasst am: 14.03.2016, 13:09    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| braesident 
 
 
 Anmeldungsdatum: 15.04.2008
 Beiträge: 189
 Wohnort: Berlin
 
 | 
			
				|  Verfasst am: 14.03.2016, 13:48    Titel: |   |  
				| 
 |  
				| 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
   
 
  	  | 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 |  |  
		|  |  
		| Jojo alter Rang
 
  
 Anmeldungsdatum: 12.02.2005
 Beiträge: 9736
 Wohnort: Neben der Festplatte
 
 | 
			
				|  Verfasst am: 14.03.2016, 14:11    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| braesident 
 
 
 Anmeldungsdatum: 15.04.2008
 Beiträge: 189
 Wohnort: Berlin
 
 | 
			
				|  Verfasst am: 14.03.2016, 14:44    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| St_W 
 
  
 Anmeldungsdatum: 22.07.2007
 Beiträge: 958
 Wohnort: Austria
 
 |  |  
		| Nach oben |  |  
		|  |  
		| Jojo alter Rang
 
  
 Anmeldungsdatum: 12.02.2005
 Beiträge: 9736
 Wohnort: Neben der Festplatte
 
 | 
			
				|  Verfasst am: 14.03.2016, 16:07    Titel: |   |  
				| 
 |  
				|  	  | 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 |  |  
		|  |  
		|  |  
  
	| 
 
 | 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.
 
 |  |