Seite 1 von 1

mittels StartDrawing(..) auf ein existierendes DC zeigen ?

Verfasst: 11.01.2013 11:59
von andi256
Hallo und ein verspätetes gutes Neues!!!

werke gerade an einer Druck-applikation (druck eines pdf mittels "Adobe PDF")

... hab mir da hier im Forum auch schon einen Source Code kopiert und ein wenig angepasst ...
http://forums.purebasic.com/german/view ... 88857a8485

im Code wird mittels api ein DC erzeugt:

Code: Alles auswählen

DC.l = CreateDC_(@lpszDriver, ImprimanteParDefaut, 0, *PrinterParameters) 
in dem ich mittels api schreiben kann und auch drucken kann ...

Code: Alles auswählen

 StartDoc_(DC,Docinfo)
 StartPage_(DC) 
 
 text$ = "TEST ANDI"
 TextOut_(DC,0,0,text$,Len(text$))
 
 EndPage_(DC) 
 EndDoc_(DC)
soweit so gut !!!

nun möchte ich aber per Purebasic-Befehlen zeichnen (BOX(),DRAWIMAGE(),LINE() ... etc)

Wie kann ich StartDrawing(.?????.) dazu bringen auf das oben genertierten (DC)device context zu zeigen ??? damit ich mit PB Befehlen arbeiten und die Seite gestalten kann und nicht nur mit api-Befehlen ...

Hoffe hab das einigermassen verständlich rübergebracht ... :-)

Danke im Voraus ...
andi256

Re: mittels StartDrawing(..) auf ein existierendes DC zeig

Verfasst: 11.01.2013 16:05
von edel
Eigentlich gar nicht, da es von Purebasic nicht unterstuetzt wird.

Falls du doch noch rummalen moechtest,kannst du mal folgenden Code ausprobieren

Code: Alles auswählen

Import ""
	PB_2DDrawing_PrepareGDI()
EndImport

Procedure OutputFromDC(hDC)
	Protected *mem = PB_2DDrawing_PrepareGDI()
	
	CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
		;PokeI(*mem + $130, hDC)
	CompilerElse
		PokeI(*mem + $D0, hDC) ; PB 5.31
	CompilerEndIf 
	
	ProcedureReturn *mem
EndProcedure
Test :

Code: Alles auswählen

Procedure start()
	
	Protected window
	Protected event
	Protected hDC
	
	window = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 300, 300, "")
	
	Repeat
		
		event = WaitWindowEvent()
		
		If  ( event = #PB_Event_CloseWindow )
			Break
		EndIf
		
		If  ( event = #PB_Event_Repaint )
			
			hDC = GetDC_(WindowID(window))
			
			StartDrawing(OutputFromDC(hDC))
				Box(10, 10, 100, 100, $71583A)
			StopDrawing()
			
			ReleaseDC_(WindowID(window), hDC)
			
		EndIf
		
	ForEver
	
EndProcedure


End start()