Text in Feld zentrieren

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Text in Feld zentrieren

Beitrag von Rudolf » Do, 15. Nov 2018 18:41

Hallo,
ich muss die Leerzeichen vor einem Text berechnen um diesen in einer Box mit der Maßeinheit in Millimeter zu zentrieren.
Ich denke ich muss eine Presentation Space mit der entsprechenden Größe erstellen, Units auf RA_PU_LOMETRIC setzen, ein Font Object mit der Schrift erstellen und GraSetFont() zuordnen, und dann mit aBox := GraQueryTextBox( oPS, cText ) die Koordinaten ermitteln. Bei mir klappt es aber nicht, bei GraQueryTextBox() sind alle Werte 0.
Grüße
Rudolf


Code: Alles auswählen

function tcenter(cText)
******************************************************************
local aBox,nW,nH,oPS
local oFont := XbpFont():new():create( "10.Arial" )
oPS := XbpPresSpace():new()
oPS:setPageSize({1000,80},GRA_PU_LOMETRIC)
GraSetFont( oPS,oFont )
aBox := GraQueryTextBox( oPS, cText )
oPS      := NIL
dc_arrayview(aBox)
return .t.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12040
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Text in Feld zentrieren

Beitrag von AUGE_OHR » Do, 15. Nov 2018 20:42

Rudolf hat geschrieben:
Do, 15. Nov 2018 18:41
Ich denke ich muss eine Presentation Space mit der entsprechenden Größe erstellen, Units auf RA_PU_LOMETRIC setzen,

Code: Alles auswählen

function tcenter(cText)
...
oPS:setPageSize({1000,80},GRA_PU_LOMETRIC)
...
nimm doch mal die Zeile raus ...
gruss by OHR
Jimmy

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Text in Feld zentrieren

Beitrag von Rudolf » Do, 15. Nov 2018 21:53

Hallo Jimmy,
gleiches Ergebnis, die Werte sind 0 im Array
Grüße
Rudolf

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12040
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Text in Feld zentrieren

Beitrag von AUGE_OHR » Do, 15. Nov 2018 22:36

ich habe es noch mal getestet und so würde es gehen

Code: Alles auswählen

local aBox,nW,nH,oPS
local oFont := XbpFont():new():create( "10.Arial" )
*oPS := XbpPresSpace():new() // FALSCH
oPS := NIL
oPS:setPageSize({1000,80},GRA_PU_LOMETRIC)
GraSetFont( oPS,oFont )
aBox := GraQueryTextBox( oPS, cText )
*oPS := NIL
dc_arrayview(aBox)
return .t.
ein GraQueryTextBox() braucht wie GetTextExtentPoint32() einen "abhängigen" Device Context also o:LockPS() oder eben NIL. du solltest also das Object mit übergeben oder mit NIL arbeiten.
gruss by OHR
Jimmy

Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Text in Feld zentrieren

Beitrag von Rudolf » Fr, 16. Nov 2018 8:53

Hallo Jimmy,
dann kann ich den Font nicht setzen. Wie wäre es ein Static zu erzeugen, hier kann ich auch Font und die Positionierung setzen. Ich kann nur nicht beim Erstellen die Einheit definieren, nur nachträglich im ps das Attribut mit der Einheit. Könnte es gehen wenn ich den viewports im presentation space dann ändere ? Ich denke ich denke die Ausgabe müsste dann in diesem viewport geschehen und graquerybox() müsste die korrketen Daten liefern.
Grüße
Rudolf

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1446
Registriert: Mi, 28. Jul 2010 17:16

Re: Text in Feld zentrieren

Beitrag von ramses » Fr, 16. Nov 2018 9:42

Rudolf,

du möchtest doch eine Bildschirmausgabe machen, sind da mm als Masseinheit überhaupt möglich?

Gruss Carlo
Valar Morghulis

Gruss Carlo

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12040
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Text in Feld zentrieren

Beitrag von AUGE_OHR » Fr, 16. Nov 2018 9:48

Rudolf hat geschrieben:
Do, 15. Nov 2018 18:41

Code: Alles auswählen

oPS := XbpPresSpace():new()
wo ist eigentlich das o:Create() ... (und mit welchem Device) :?:
gruss by OHR
Jimmy

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12040
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Text in Feld zentrieren

Beitrag von AUGE_OHR » Fr, 16. Nov 2018 10:05

Code: Alles auswählen

#include "gra.ch"

PROCEDURE MAIN
LOCAL oXbp
local cText := "Hello world"

   oXbp := XbpStatic():new( ,, {10, 10 },{400, 100} )
   oXbp:Create()

   TuMal(oXbp,cText)

RETURN

PROCEDURE TuMal(oXbp,cText)
local aBox,nW,nH,oPS := NIL
local oFont := XbpFont():new():create( "10.Arial" )

#IFDEF Use_MicroPS
   oPS := oXbp:lockPS()
#ELSE
   oPS := XbpPresSpace():new()
   oPS:create(oXbp:winDevice(),{1000,80},GRA_PU_LOMETRIC)
*   oPS:setPageSize({1000,80},GRA_PU_LOMETRIC)
#ENDIF

   GraSetFont( oPS,oFont )
   aBox := GraQueryTextBox( oPS, cText )

#IFDEF Use_MicroPS
   oXbp:unlockPS()
#ENDIF
   oPS  := NIL
   Msgbox(Var2char(aBox))
return
gruss by OHR
Jimmy

Antworten