Probleme beim Drucken

Für allgemeine Fragen zur Programmierung mit PureBasic.
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

Probleme beim Drucken

Beitrag von garfield9992003 »

Hallo.

Ich habe eine Form mit einem Bild und integrierter Drucker-Auswahl. Es soll das Bild gedruckt werden (im Beispiel Schwarz wegen Codegrösse).

Warum wird nichts gedruckt?

Need Help, please :(

EDIT: Code entfernt
Zuletzt geändert von garfield9992003 am 17.05.2005 15:10, insgesamt 2-mal geändert.
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

Beitrag von garfield9992003 »

*gelöscht*, da unwichtig
Zuletzt geändert von garfield9992003 am 17.05.2005 15:15, insgesamt 1-mal geändert.
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

Beitrag von garfield9992003 »

*gelöscht* da uninteressant
Zuletzt geändert von garfield9992003 am 17.05.2005 15:15, insgesamt 1-mal geändert.
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

Beitrag von garfield9992003 »

Mein alter Code war etwas buggy. Nun der richtige:
im Code sind 2 Blöcke gekennzeichnet - Mit dem ersten funktioniert es - aber mit dem 2. funktioniert es nicht.

Das Image 0 soll nur auf dem DRucker ausgegeben werden - aber warum muss ich es zuerst speichern und dann mit loadimage_ laden, anstatt mit UseImage direkt das Handle zu bekommen?

Es scheint mir so, als ob Useimage irgendwelche Sachen kaputt macht :(

*umguck* Wo ist Danilo?! *verzweifel*

Wer hat Rat?

Grüße

Frank

Code: Alles auswählen

Enumeration
  #BClose
  #drucker
  #L105
  #Vorschau
EndEnumeration

Dim DevIn.DEVMODE(0)
Dim DevOut.DEVMODE(0) 

Procedure Drucken()
; the image-dimensions 320*440 is only an example
  OpenPrinter_(GetGadgetText(#drucker),@PrinterHandle.l,0) 
  DocumentProperties_(0,PrinterHandle,GetGadgetText(#drucker),DevIn(0),DevOut(0),8|2)
  ClosePrinter_(PrinterHandle)
  PrinterDC.l = CreateDC_("WINSPOOL",GetGadgetText(#drucker),0,DevIn(0))
  DocInf.DOCINFO 
  DocInf\cbSize = SizeOf(DOCINFO) 
  DocInf\lpszDocName = @"Ausdruck"
  DocInf\lpszOutput = #Null 
  DruckBreite= GetDeviceCaps_(PrinterDC, 8) 
  DruckHoehe= GetDeviceCaps_(PrinterDC, 10)
  StartDoc_(PrinterDC,@DocInf)
  StartPage_(PrinterDC)
    
;This block works!!!
    SaveImage(0, "c:\test.bmp", #PB_ImagePlugin_BMP)
    imgDC = LoadImage_(0,"c:\test.bmp",0,0,0,$2050)
    hdc = CreateCompatibleDC_(PrinterDC)
    SelectObject_(hdc,imgDC)

;This should, but it dont    
    ; imgDC = UseImage(0)
    ; hdc = CreateCompatibleDC_(PrinterDC)
    ; SelectObject_(hdc,imgDC)    

  StretchBlt_(PrinterDC,0,0,DruckBreite,DruckHoehe,hdc,0,0,319,439,#SRCCOPY) 
  DeleteDC_(hdc)         
  EndPage_(PrinterDC)
  EndDoc_(PrinterDC) 
  DeleteDC_(PrinterDC)
EndProcedure

NewList DruckerListe.s() 
Procedure GetPrinters()
  ClearList(DruckerListe()) 
  Buffersize.l  = 8192 
  *Buffer = GlobalAlloc_(#GMEM_FIXED | #GMEM_ZEROINIT, Buffersize) 
  If GetProfileString_("devices", 0, "", *Buffer, Buffersize) 
    TempString.s = PeekS(*Buffer) 
    Length.l = Len(TempString) 
    While TempString <> "" 
      AddElement(DruckerListe()) 
      DruckerListe()= TempString
      TempString = PeekS(*Buffer + Length + 1) 
      Length = Length + Len(TempString) + 1 
    Wend 
  EndIf 
  GlobalFree_(*Buffer) 
EndProcedure 

;MAIN
  
  OpenWindow(0, 131, 225, 646, 490, #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Test")
  If CreateGadgetList(WindowID())
    ButtonGadget(#BClose, 435, 455, 100, 20, "Print / Close")
    ComboBoxGadget(#drucker, 405, 170, 165, 90)
    TextGadget(#L105, 335, 175, 65, 15, "Printer:", #PB_Text_Right)
    CreateImage(0,320,440)
    ImageGadget(#Vorschau, 5, 5, 320, 440, UseImage(0))
  EndIf
  
  GetPrinters() 
  ResetList(DruckerListe())
  While NextElement(DruckerListe()) ;all printers into combo
    AddGadgetItem(#drucker,-1, DruckerListe())
  Wend
  
  Repeat 
    EventID=WaitWindowEvent()
    Select EventID
      Case #PB_EventGadget 
        Select EventGadgetID() 
          Case #BClose: Ende=1
        EndSelect
    EndSelect
  Until Ende=1
   
  If MessageRequester("","Print Image?",#PB_MessageRequester_YesNo)=6
    Drucken()
  EndIf
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

Beitrag von garfield9992003 »

Erledigt, funktioniert nun mit stretchdibits.
Antworten