Seite 1 von 1

Verfasst: 18.05.2009 21:29
von sibru
hiermit geht´s:

Code: Alles auswählen

;Modul      Icon2Image Version 1.07 vom 21.04.2008
;#PB_Vers = "4.20"
;
;Funktion:  Umformung Icon --> PB-Image
;           Ein Icon -z.Bsp. von LoadIcon_() oder ExtractIconEx_()- wird zu
;           einem PB-Image umgesetzt und die #ImageNr des neuen Images wird
;           zurückgeliefert.
;
;Aufruf:    ImageNr = Icon2Image(IconID {,HG_Farbe})
;           IconID:   Handle des umzusetzenden Quell-Icon´s
;           HG_Farbe: Hintergrund-Farbe für transparente Icon´s, wenn nicht
;                     angegeben, so wird FensterRahmen-Farbe benutzt
;           
;           Diese Funktion liefert die #ImageNr des erzeugten PB-Images oder
;           0, wenn ein ungültiges Icon übergeben wurde.
;

;#jaPBeExt exit
Procedure Icon2Image(IconID, HG_Col = - 1)
  Protected IconBr, IconHo, IconInfo.ICONINFO
  Protected ImgNr, ImgID, ImgHDC
  If GetIconInfo_(IconID, @IconInfo)  ;check Icon & get IconSize:
    IconBr = IconInfo\xHotspot * 2
    IconHo = IconInfo\yHotspot * 2
    ImgNr = CreateImage(#PB_Any, IconBr, IconHo)
    ImgHDC = StartDrawing(ImageOutput(ImgNr))
    If HG_Col<0 : HG_Col = GetSysColor_(#COLOR_3DFACE): EndIf
    Box(0, 0, IconBr, IconHo, HG_Col)
    #DI_NORMAL = 3
    DrawIconEx_(ImgHDC, 0, 0, IconID, IconBr, IconHo, 0, 0, #DI_NORMAL)
    StopDrawing()
  EndIf
  ProcedureReturn ImgNr
EndProcedure

Verfasst: 18.05.2009 21:42
von Falko
Das Ausdrucken funktioniert schon. Du müsstest wegen dem Event den Button schon länger fest halten. Dann kommt auch der Printerrequester.

Ich habe den Code etwas abgeändert. Damit reagiert Dein Button zum
Drucken besser. Für die fehlenden Bilder musst Du dir schon was einfallen lassen.


Code: Alles auswählen

#window = 0
#button = 555

kmax = 30 ;(die ersten 30 Icons aus shell32.dll)

OpenWindow(#window, 0 , 0 , 700 , 460 , "Icons" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

scroll_y = (kmax/4) * 70
ScrollAreaGadget(#PB_Any, 10, 25, 680, 430, 648, scroll_y, 100)
ButtonGadget(#button, 590, scroll_y-20, 50, 20, "Drucken")
           
For k = 0 To kmax
   x_pos = 30 + 100*(k%6)
   y_pos = 20 + 100*(k/6)
   hIcon.l = 0
   ExtractIconEx_("shell32.dll",k,@hIcon,0,1)
   ImageGadget(k, x_pos, y_pos, 32, 32, hIcon, 0)
   TextGadget(#PB_Any, x_pos + 7, y_pos +40, 20, 20, Str(k))
Next

LoadFont(0, "Arial",44)

Repeat

Event = WaitWindowEvent()
 
Select Event
  Case #PB_Event_Gadget
  Select EventGadget()
    Case #button
        If PrintRequester()
          If StartPrinting("Icon-Druck")
             
             If StartDrawing(PrinterOutput())
                For k = 0 To kmax
                   ;nach 20 Bildern neue Seite anfangen
                    If k%20 = 0 And k>0
                      NewPrinterPage()
                    EndIf     
                    x_pos = 500 + 24*45*(k%4)
                    y_pos = 200 + 24*55*((k/4) - 5*(k/20)) 
                    ExtractIconEx_("shell32.dll",k,@hIcon,0,1)   
                    DrawImage(hIcon, x_pos, y_pos , 1000, 1000)
                    DrawingFont(FontID(0))
                    DrawText(x_pos, y_pos + 520, Str(k))
                 Next
                 StopDrawing()
             EndIf
             StopPrinting()
          EndIf     
        EndIf
    EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow  

Verfasst: 19.05.2009 10:28
von Andi
Das Drucken von Icons scheint etwas schwierig zu sein (vielleicht sogar überhaupt nicht möglich?). Ich komme mit den Befehlen

Code: Alles auswählen

ExtractIconEx_() bzw. LoadImage_()
StartDrawing(PrinterOutput())
DrawImage() bzw. DrawIcon_()/DrawIconEx_() 
leider nicht zum Ziel

Verfasst: 19.05.2009 10:36
von ts-soft
Warum nutzt Du nicht die Procedure von sibru?

Verfasst: 19.05.2009 10:47
von Andi
Aber sibrus Code beinhaltet doch keine Ausgabe auf dem Drucker: StartDrawing(ImageOutput(ImgNr)). Ich habe die Zeile natürlich abgeändert, aber gedruckt wurde nichts.

Verfasst: 19.05.2009 10:57
von ts-soft
sibrus code wandelt auch nur das icon zum image!
das image kannste dann auch ausdrucken :wink:

Verfasst: 19.05.2009 11:22
von Andi
Danke, ts-soft! Jetzt klappt es! Ich hatte nicht erkannt, dass es bei sibrus Prozedur um eine Umwandlung icon->image ging und die Druckoption noch nicht enthalten ist. :oops:

Verfasst: 19.05.2009 16:30
von Andesdaf
Andi hat geschrieben:Danke, ts-soft! Jetzt klappt es! Ich hatte nicht erkannt, dass es bei sibrus Prozedur um eine Umwandlung icon->image ging und die Druckoption noch nicht enthalten ist. :oops:
dabei stehts doch da:

Code: Alles auswählen

;Funktion:  Umformung Icon --> PB-Image 
Passiert eben jedem mal :wink: