PrintDevice / XbpPresSpace: in ein Xbp zeichnen lassen
Moderator: Moderatoren
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
PrintDevice / XbpPresSpace: in ein Xbp zeichnen lassen
Hi,
ich möchte eine "externe" Funktion in ein XbasePart zeichnen lassen. Konkret geht es um das TxTextControl, dass eine PrintDevice-Eigenschaft kennt, der man einen "device context" zuweisen kann, in welchen das TxTextcontrol dann seine Druckausgabe zeichnet.
Kann mir jemand einen Hinweis geben, was ich da zuweisen muss, damit die Druckausgabe in einem XbpBitmap ankommt?
ich möchte eine "externe" Funktion in ein XbasePart zeichnen lassen. Konkret geht es um das TxTextControl, dass eine PrintDevice-Eigenschaft kennt, der man einen "device context" zuweisen kann, in welchen das TxTextcontrol dann seine Druckausgabe zeichnet.
Kann mir jemand einen Hinweis geben, was ich da zuweisen muss, damit die Druckausgabe in einem XbpBitmap ankommt?
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: PrintDevice / XbpPresSpace: in ein Xbp zeichnen lassen
Hi,
ein Presentation Space hat einen Device Context.
Bei XbpPrinter() ist das der Druckertreiber, bei einem Fenster ist das :winDevice() - ein XbpStatic() wird vom XbpWindow() abgeleitet,
also sollte es mit einem XbpStatic() Kontrol gehen. Vermutlich muss man aber dann die Anzeige bei jedem DRAW() Event neu zeichnen lassen.
eine Ähnliche Fragestellung gab es auch in QuickPDF, laut Pablo konnte dort allerdings nicht die Funktion mit DeviceContext() im Namen verwendet werden, sondern eine die einen "Bitsteam" erzeugte. Dieser wurde dann in ein XbpBitmap Objekt umgeleitet ...
Weiß jemand - z.B. der der gefragt hat - wo das steht ?
ein Presentation Space hat einen Device Context.
Bei XbpPrinter() ist das der Druckertreiber, bei einem Fenster ist das :winDevice() - ein XbpStatic() wird vom XbpWindow() abgeleitet,
also sollte es mit einem XbpStatic() Kontrol gehen. Vermutlich muss man aber dann die Anzeige bei jedem DRAW() Event neu zeichnen lassen.
eine Ähnliche Fragestellung gab es auch in QuickPDF, laut Pablo konnte dort allerdings nicht die Funktion mit DeviceContext() im Namen verwendet werden, sondern eine die einen "Bitsteam" erzeugte. Dieser wurde dann in ein XbpBitmap Objekt umgeleitet ...
Weiß jemand - z.B. der der gefragt hat - wo das steht ?
Gruß
Hubert
Hubert
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: PrintDevice / XbpPresSpace: in ein Xbp zeichnen lassen
Hi Hubert,brandelh hat geschrieben:Hi,
ein Presentation Space hat einen Device Context.
Bei XbpPrinter() ist das der Druckertreiber, bei einem Fenster ist das :winDevice() - ein XbpStatic() wird vom XbpWindow() abgeleitet,
also sollte es mit einem XbpStatic() Kontrol gehen. Vermutlich muss man aber dann die Anzeige bei jedem DRAW() Event neu zeichnen lassen.
was will mir der Verfasser damit sagen...
So hatte ich das vermutet, aber wenn ich XbpStatic():Windevice() übergebe, bekomme ich einen Typkonflikt.
Den Thread hatte ich auch gefunden, aber das wurde dann ja ganz anders gelöst (über eine Render-Funktion, die einen String lieferte, wenn ich mich recht erinnere)...brandelh hat geschrieben: eine Ähnliche Fragestellung gab es auch in QuickPDF, laut Pablo konnte dort allerdings nicht die Funktion mit DeviceContext() im Namen verwendet werden, sondern eine die einen "Bitsteam" erzeugte. Dieser wurde dann in ein XbpBitmap Objekt umgeleitet ...
Weiß jemand - z.B. der der gefragt hat - wo das steht ?
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: PrintDevice / XbpPresSpace: in ein Xbp zeichnen lassen
hattest du mit RTF nicht mal ein ähnliches Problem ? http://www.xbaseforum.de/viewtopic.php? ... it=lockHDCMarkus Walter hat geschrieben:was will mir der Verfasser damit sagen...
gruss by OHR
Jimmy
Jimmy
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: PrintDevice / XbpPresSpace: in ein Xbp zeichnen lassen
Hi Jimmy,
das hatte ich glatt vergessen. Da ging es zwar um eine andere Geschichte (List&Label), aber das sollte in die gleiche Richtung gehen. Muss ich mir nochmal anschauen...
das hatte ich glatt vergessen. Da ging es zwar um eine andere Geschichte (List&Label), aber das sollte in die gleiche Richtung gehen. Muss ich mir nochmal anschauen...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: PrintDevice / XbpPresSpace: in ein Xbp zeichnen lassen
Hm,
so wie es mit List&Label damals ging, geht es mit TxControl nicht...
Bei LL hatte ich das so gebaut:
das "gleiche" mit TxControl:
liefert eine Fehlermeldung "Ungültiger Eigenschaftswert. (1-2101)"
Allerdings kann ich auch nicht drucken, wenn ich :PrintDevice nicht setze (dann sollte eigentlich ein Ausdruck auf den Standard-Drucker erfolgen). Es kommt dann zwar keine Fehlermeldung, aber es druckt auch nicht...
Ein Problem könnte vielleicht sein, das TxControl für die Seitenzahl einen Integer-Wert möchte. Xbase arbeitet ja was API-Calls angeht immer mit Long-Werten. Bei ActiveX auch? Hat jemand eine Idee, ob man auch Integer-Werte übergeben kann?
so wie es mit List&Label damals ging, geht es mit TxControl nicht...
Bei LL hatte ich das so gebaut:
Code: Alles auswählen
oPS := oXbp:lockPS()
nDC := oPS:lockHDC( 4, @hDC )
nError := LlRTFDisplay(hJob, hRTF, hDC, pRC, .t., @pnState)
oPS:UnlockHDC( nDC, hDC )
oXbp:unlockPS( oPS )
Code: Alles auswählen
oPS := oStatic:lockPS()
nDC := oPS:lockHDC( 4, @hDC )
oTx:PrintDevice := nDC
oTx:PrintPage(1)
oPS:UnlockHDC( nDC, hDC )
oStatic:unlockPS( oPS )
Allerdings kann ich auch nicht drucken, wenn ich :PrintDevice nicht setze (dann sollte eigentlich ein Ausdruck auf den Standard-Drucker erfolgen). Es kommt dann zwar keine Fehlermeldung, aber es druckt auch nicht...
Ein Problem könnte vielleicht sein, das TxControl für die Seitenzahl einen Integer-Wert möchte. Xbase arbeitet ja was API-Calls angeht immer mit Long-Werten. Bei ActiveX auch? Hat jemand eine Idee, ob man auch Integer-Werte übergeben kann?
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: PrintDevice / XbpPresSpace: in ein Xbp zeichnen lassen
hi,
zunächst benötigt man einen Parent z.b. XbpStatic wo wir leeres (Xbase++) Bitmap als Caption nehmen.
Dannso bekommst du vom "Fenster" den "DC"
von deinem ActiveX Control bekommst du den anderen "DC" und dann kommt nur noch ein BitBlt()du überträgst also den kompletten "Inhalt" von einem Fenster in ein anderes mit BitBlt()
die Caption der Static war ja das Bitmapwenn du erst mal das (Xbase++) Bitmap Object hast wird das weiter verarbeiten wohl kein Problem sein.
der Thread ist zwar alt aber jetzt habe ich eine Lösung die in solchen Fällen als Workaround funktioniert.Markus Walter hat geschrieben:ich möchte eine "externe" Funktion in ein XbasePart zeichnen lassen.
... in einem XbpBitmap ankommt?
zunächst benötigt man einen Parent z.b. XbpStatic wo wir leeres (Xbase++) Bitmap als Caption nehmen.
Dann
Code: Alles auswählen
DLLFUNCTION GetWindowDC( hwnd ) USING STDCALL FROM USER32.DLL
hDC1 := GetWindowDC( oStatic:GethWnd() )
von deinem ActiveX Control bekommst du den anderen "DC" und dann kommt nur noch ein BitBlt()
Code: Alles auswählen
DllCall("Gdi32.dll",DLL_STDCALL,"BitBlt", nDestDC, aPos2[1], aPos2[2], aSize1[1], aSize1[2],;
nSourceDC, aPos1[1], aPos1[2], nOperation)
die Caption der Static war ja das Bitmap
Code: Alles auswählen
oBitmap := oStatic:Caption
oBitmap:Savefile("Test1.BMP") // nur zur Demo das da was ist.
gruss by OHR
Jimmy
Jimmy