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 »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Text in Feld zentrieren

Beitrag von AUGE_OHR »

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 »

Hallo Jimmy,
gleiches Ergebnis, die Werte sind 0 im Array
Grüße
Rudolf
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Text in Feld zentrieren

Beitrag von AUGE_OHR »

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 »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Text in Feld zentrieren

Beitrag von ramses »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Text in Feld zentrieren

Beitrag von AUGE_OHR »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Text in Feld zentrieren

Beitrag von AUGE_OHR »

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