GraQueryTextBox funktoniert nicht wie gewünscht

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von UliTs »

Hallo,

ich habe folgendes Problem:
Ich habe mittels XbpPreView meine Druckvorschau geschrieben.
Bisher benutze ich noch keine Proportionalschrift.

Jetzt möchte ich jedoch als Schriftart ARIAL verwenden und
zwecks Positionierung mittels GraQueryTextBox die Breite der
Texte bestimmen.

Mein Problem:
GraQueryTextBox funktioniert bei mir nicht, wenn ich die
Schriftart bzw. -größe verändere. Was mache ich falsch?

Code: Alles auswählen

            ...
            cStr :='Hallo, hier bin ich! '
            oXbpFont := XbpFont():new( oPS )
            oXbpFont:familyName := "Arial"
            oXbpFont:nominalPointSize := 12
            oXbpFont:create()
            oPS:setFont( oXbpFont )
            GraSegOpen(oPS) )
            GraStringAt( oPS, { 100,100 },cStr )
            aPoints := GraQueryTextBox( oPS,cStr )   // Werte sind korrekt

            oXbpFont := XbpFont():new( oPS )
            oXbpFont:familyName := "Arial"
            oXbpFont:nominalPointSize := 24
            oXbpFont:generic := .T.
            oXbpFont:create()
            oPS:setFont( oXbpFont )
            GraStringAt( oPS, aPoints[3],cStr )
            aPoints := GraQueryTextBox( oPS,cStr )   // Werte sind falsch!
            GraStringAt( oPS, aPoints[3],cStr )
            ...
Uli
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Uli,
da liegt ein Verständnisproblem vor. GraQueryTextBox liefert keine Höhe, bzw. Breite - die musst Du selber berechnen!

Code: Alles auswählen

aTextBox := GraQueryTextBox( oPS, text1 )
nBreite  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
nHoehe   := aTextBox[ 3, 2 ] - aTextBox[ 2, 2 ]
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Hallo Martin,

da hast Du mich falsch verstanden!
Aber auch bei Deinem Code wird die Breite
und Höhe nach Änderung der Schriftart / -größe
falsch berechnet!

Auch die Pen-Position


Uli

Code: Alles auswählen

GraQueryTextBox( oPS, text1 )[5]

ändert sich nicht.

Uli
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Uli,
tut mir leid, aber ich ändere zwischendurch immer mal wieder die Schriftarten bzw. -größen - und bei mir stimmt es!
Was ich jedoch anders mache:

Code: Alles auswählen

if pPS <> NIL
  pPS:device():startDoc( ConvToAnsiCP( "EASYDOG: Urkunde" ) )
  if oFont2 == NIL
    oFontDlg := XbpFontDialog():New( fensterhandle, fensterhandle, , pPS )
    oFontDlg:familyName := "Times New Roman"
    oFontDlg:Create()                 // Font-Dialog erzeugen
    oFont2 := oFontDlg:display()
  else
    compname := oFont2:compoundName
    nomsize := oFont2:nominalPointSize
    oFont2:destroy()
    oFont2 := XbpFont():New( pPS )
    oFont2:create( alltrim( str( nomsize ) ) + "." + compname)                        // Font erzeugen
    if oFont2 <> NIL
      attr := array( GRA_AS_COUNT )
      select 1
      do while recno() <= hhun
        if xurkunde->hundename
          oFont2:height :=  xurkunde->hundeschrg * 5
          oFont2:width :=  xurkunde->hundeschrg * 2
          oFont2:bold := ( "f" $ xurkunde->hundeschrs )
          if "f" $ xurkunde->hundeschrs
            oFont2:weightClass := XBPFONT_WEIGHT_BOLD
          else
            oFont2:weightClass := XBPFONT_WEIGHT_NORMAL
          endif
          oFont2:italic := ( "k" $ xurkunde->hundeschrs )
          oFont2:configure()                        // Font erzeugen
          GraSetFont( pPS, oFont2 )
          attr[GRA_AS_HORIZALIGN] := xurkunde->hundeschra
          GraSetAttrString( pPS, attr )
          links := Max( 0, ( 100 * xurkunde->hundelinks ) - lrand )
          unten := Max( 0, ( 100 * xurkunde->hundeunten ) - urand )
          text := alltrim( hundenamen ) + " "
          textteil1 := textteil2 := textteil3 := ""
          if xurkunde->hundeschra == GRA_HALIGN_LEFT
            if ( xurkunde->hundezeile > 1 )
              if 100 * ( xurkunde->hundeende - 5 ) > links
                laenge := ( 100 * xurkunde->hundeende ) - links
                aTextBox    := GraQueryTextBox( pPS, text )
                nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
                if nFontWidth > laenge
                  a := 0
                  do while .t.
                    b := at( " ", text, a + 1 )
                    if b > 0
                      textteil1 := left( text, b - 1 )
                      aTextBox    := GraQueryTextBox( pPS, textteil1 )
                      nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
                      if nFontWidth > laenge
                        if a <> 0
                          textteil1 := left( text, a - 1 )
                          text := substr( text, a + 1 )
                          exit
                        endif
                      else
                        a := b
                      endif
                    elseif a <> 0
                      textteil1 := left( text, a - 1 )
                      text := substr( text, a + 1 )
                      exit
                    endif
                  enddo
                  if ( xurkunde->hundezeile > 2 ) .and. .not. empty( text )
                    aTextBox    := GraQueryTextBox( pPS, text )
                    nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
                    if nFontWidth <= laenge
                      textteil2 := text
                    else
                      a := 0
                      do while .t.
                        b := at( " ", text, a + 1 )
                        if b > 0
                          textteil2 := left( text, b - 1 )
                          aTextBox    := GraQueryTextBox( pPS, textteil2 )
                          nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
                          if nFontWidth > laenge
                            if a <> 0
                              textteil2 := left( text, a - 1 )
                              textteil3 := substr( text, a + 1 )
                              exit
                            endif
                          else
                            a := b
                          endif
                        elseif a <> 0
                          textteil2 := left( text, a - 1 )
                          textteil3 := substr( text, a + 1 )
                          exit
                        endif
                      enddo
                    endif
                  else
                    textteil2 := text
                  endif
                else
                  textteil1 := text
                endif
                if .not. empty( textteil3 )
                  GraStringAt( pPS, { links, unten + ( xurkunde->hundeschrg * 11 ) }, textteil1 )
                  GraStringAt( pPS, { links, unten + ( xurkunde->hundeschrg * 5.5 ) }, textteil2 )
                  GraStringAt( pPS, { links, unten }, textteil3 )
                elseif .not. empty( textteil2 )
                  GraStringAt( pPS, { links, unten + ( xurkunde->hundeschrg * 5.5 ) }, textteil1 )
                  GraStringAt( pPS, { links, unten }, textteil2 )
                else
                  GraStringAt( pPS, { links, unten }, textteil1 )
                endif
              else
                GraStringAt( pPS, { links, unten }, text )
              endif
            else
              GraStringAt( pPS, { links, unten }, text )
            endif
          else
            GraStringAt( pPS, { links, unten }, text )
          endif
        endif
...
Es ist zwar jedesmal die selbe Schrift, aber die Größe kann unterschiedlich sein und das berechnen/positionieren klappt.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Hallo Martin,

soeben habe ich die Ursache gefunden!
Es ist ein Fehler in xBase.

Wenn man die Anzeige während der Berechnung der grafischen Primitive ausschaltet,

Code: Alles auswählen

  nOldMode := GraSegDrawMode( oPS, GRA_DM_RETAIN )
liefert

Code: Alles auswählen

GraQueryTextBox( oPS,cStr )
falsche Werte zurück.
Ich vermute, die Werte beziehen sich auf die letzte vor dem Ausschalten eingestellte Schriftart.

Danke für die Hilfe,

Uli
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re:

Beitrag von Manfred »

Martin Altmann hat geschrieben:Hallo Uli,
da liegt ein Verständnisproblem vor. GraQueryTextBox liefert keine Höhe, bzw. Breite - die musst Du selber berechnen!

Code: Alles auswählen

aTextBox := GraQueryTextBox( oPS, text1 )
nBreite  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
nHoehe   := aTextBox[ 3, 2 ] - aTextBox[ 2, 2 ]
Viele Grüße,
Martin
Ich muß da jetzt mal nachhaken, weil ich gerade damit beschäftigt bin. Wieso liefert das keine Höhe bzw. Breite? Was sind das denn für Werte die zurückkommen?

Vielleicht ist das ja auch mein Problem von hier?

http://www.xbaseforum.de/viewtopic.php?f=36&t=4103
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Manfred,
es liefert ein Quadrat - also zwei Punkte, die sich diagonal gegenüber liegen (links unten und rechts oben). In diesem Bereich steht dann der Text.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Manfred »

Hi martin,

hast Du denn mal meinen Link verfolgt und evtl. nachgesehen, ob ich da was falsch verstehe?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von brandelh »

Hallo Manfred,

also beim normalen GraQueryStr() liegt es meist am eingestellten GraSetFont() wenn was nicht so ist wie man es erwartet.
Wie es bei deinem DC_... aussieht, weiß ich nicht ;-)

PS: Blanks zählen auch zum String ;-)
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Manfred,
kann ich nicht beurteilen - ich nutze kein eXpress++ :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Manfred »

Sorry,

es ist kein express++ Problem. Roger arbeitet mit der GraQueryTextBox() und die liefert den Wert zurück. Als ich die Frage stellte, dachte ich erst es wäre was mit express++. Ich wollte aber auch keinen neuen Thread aufmachen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Manfred,
ich weiß doch nicht, was Roger zurück liefert? Das Ergebnis der Berechnung (also die wirkliche Länge)?
Oder das Array mit den beiden Koordinaten?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Kannst Dir ja auch mal meine damaligen Thread dazu durchlesen :!:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Manfred »

Hm,

habe ich gemacht. Schon vorher, aber das Thema ist zu neu für mich, als dass ich da etwas draus sehen könnte.

Meine Frage ist doch einfach nur ob das so richtig ist, was ich da erhalte, bzw. warum es dann trotzdem nicht paßt. Wo liegt denn mein Denkfehler? Wenn es denn einer ist.

PS: zu spät gesehen, dass da noch was drüber stand.

Es werden die Koordinaten zurückgeliefert. Aber wenn ich in der Funktion im Debugger GraQueryTextBox() aufrufe, bekomme ich die Werte auch so zurück. Ich dachte damit könnte ich irgendwie prüfen, ob mein Text in den vorhanden Platz paßt, bzw. damit den Text passend machen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Manfred,
Manfred hat geschrieben:Ich dachte damit könnte ich irgendwie prüfen, ob mein Text in den vorhanden Platz paßt, bzw. damit den Text passend machen.
kannst Du doch auch - dafür ist es gedacht!
Aber ohne zu sehen, wie Du dann mit dem Ergebnis umgehst, kann ich Dir latürnich nicht helfen!
Mach doch mal eine Grafik von dem falschen Textbild und zeige die 7-8 Zeilen inklusive Berechnung und Ausgabe.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Manfred »

Meinst Du sowas hier?

Code: Alles auswählen

FUNCTION druckeUmlaufplanZeile(oUmlaufplanDetail,nX,nBoxBreite,oUmlaufplan)
         LOCAL aAttribute     := Array(GRA_AL_COUNT)
         LOCAL cFahrtweg      := Trim((oUmlaufplanDetail:nArea)->fahrtweg)
         LOCAL cFahrtweg2
         LOCAL cFont          := "10.Arial Bold"
         LOCAL nLaengeFahrtwegText
         LOCAL lDoppelteZeile := .F.
         LOCAL lBold          := IF((oUmlaufplanDetail:nArea)->haendisch,.F.,.T.)
         LOCAL nAbstand       := 5
         LOCAL nHoehe         := 40
         LOCAL nNachOben      := 5
         LOCAL nNachUnten     := 5
         LOCAL nY             := 70

         IF ! lBold
            cFont := "10.Arial"
         ENDIF
         nLaengeFahrtwegText := dc_graquerytextbox(cFahrtweg,cFont)[1]
         IF nLaengeFahrtwegText > 1000
            nHoehe := nHoehe * 2 + 2*nAbstand
            lDoppelteZeile := .T.
            cFahrtweg2 := "2.Teil"
         ENDIF
         aAttribute[GRA_AL_TYPE ] := GRA_LINETYPE_INVISIBLE
         @ nX-nNachOben,60 ,nX+nHoehe+nNachUnten,nBoxBreite DCPRINT BOX;
                                                           LINEATTR aAttribute;
                                                               GRAY 8;
                                                              PIXEL
         oUmlaufPlanDetail:nZeilen++
         IF lBold
            DCPRINT FONT "10.Arial Bold"
         ELSE
            DCPRINT FONT "10.Arial"
         ENDIF
         IF lDoppelteZeile
            nX += (nHoehe/2) - nNachUnten
            oUmlaufPlanDetail:nZeilen++
         ELSE
            nX += nHoehe - nNachUnten                                              // es soll ja mittig sein
         ENDIF
         @ nX,nY DCPRINT SAY (oUmlaufplanDetail:nArea)->linie;
                   PIXEL
         nY += 135
         IF (oUmlaufplanDetail:nArea)->zielnr > 0
            IF ! lBold
               DCPRINT FONT "8.Arial"
            ELSE
               DCPRINT FONT "8.Arial Bold"
            ENDIF
            @ nX,nY DCPRINT SAY Alltrim(Str((oUmlaufplanDetail:nArea)->zielnr));
                      PIXEL

         ENDIF
         IF lBold
            DCPRINT FONT "10.Arial Bold"
         ELSE
            DCPRINT FONT "10.Arial"
         ENDIF
         nY += 85
         IF ! Empty((oUmlaufplanDetail:nArea)->fahrt)
            @ nX,nY DCPRINT SAY Alltrim(Str((oUmlaufplanDetail:nArea)->fahrt));
                      PIXEL
         ENDIF
         nY += 160
         @ nX,nY DCPRINT SAY PosIns((oUmlaufplanDetail:nArea)->abfahrt,":",3);
                   PIXEL
         nY += 110
         @ nX,nY DCPRINT SAY cFahrtweg;
                   PIXEL
         IF lDoppelteZeile
            @ nX + nHoehe/2,nY DCPRINT SAY cFahrtweg2;
                                 PIXEL
         ENDIF
         nY += 1120
         IF ! Empty((oUmlaufplanDetail:nArea)->ankunft)
            @ nX,nY DCPRINT SAY PosIns((oUmlaufplanDetail:nArea)->ankunft,":",3);
                      PIXEL
         ENDIF
         nY += 150
         IF (oUmlaufplanDetail:nArea)->berechnen
            oUmlaufplanDetail:berechneLenkzeit()
            @ nX,nY DCPRINT SAY Substr(oUmlaufplanDetail:cLenkzeit,1,5);
                      PIXEL
         ENDIF
         IF oUmlaufPlanDetail:nZeilen >= 44
            DCPRINT EJECT
            druckeUmlaufPlanKopf(oUmlaufplan,@nX,oUmlaufplanDetail,nBoxBreite)  // das müßte so klappen
         ELSE
            IF lDoppelteZeile
               nX += (nHoehe/2) - nNachUnten + nAbstand
            ENDIF
            nX += nNachOben + nNachUnten + nAbstand + nNachUnten                   // weil der Text mittig gesetzt wurde mit dem Wert
         ENDIF
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Im Prinzip ja.
Und nun noch ein Bild von dem falschen Ausdruck!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Mir ist nicht so ganz klar, warum Du nX (ist ja der Abstand von rechts) bei Berechnungen mit nHoehe und nNachUnten (was ja eigentlich nY sein müsste) berechnest!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von brandelh »

Hallo Manfred,

wenn es KEIN Express++ Problem ist und Roger ... wie du schreibst ... GraQueryTxtBox() nutzt, dann ...

Code: Alles auswählen

dc_graquerytextbox(cFahrtweg,cFont)[1]
liest du mit dieser Zeile eben nicht die Länge, sondern einen der 6 oder 8 Werte - habe ich jetzt nicht im Kopf.

Also ist es doch ein Express++ Problem !!!
Bzw. deines, da du das Handbuch nicht gelesen hast ;-)

Dort muss drin stehen, was genau dieser Parameter ist !

Weiterhin muss dort drin stehen, was der Parameter cFont bewirken soll !
Wenn ich recht vermute, dann stellt Express++ diesen ein, misst und stellt wieder zurück.

Deine Erlebnisse würden auf die Situation passen, dass dort ein Font mit BOLD eingetragen ist und somit
BOLD gemessen wird, unten aber z.B. ein NICHT BOLD gedruckt wird. Der ist kürzer :lol:

PS: ab und zu kommt es eben GENAU drauf an was man wann und wo macht ;-)
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Manfred »

@Hubert,

ich lese einen der Werte aus, da hast Du Recht. Ich habe innerhalb der Funktion von express++ im Debugger ein GraQueryTextBox() gemacht und erhalte die verschiedenen Werte, von denen einer genau zu den Rückgabewerten der Express++ Funktion paßt. Und das ist der größte, somit kann ich mich auch nicht evtl. vertun. Und wie man am obige Code erkennen kann, schicke ich genau die Schriftart zum Prüfen, mit der ich auch drucke.

@Martin,

nX ist der Abstand von "oben". nY ist der Abstand von links
Dateianhänge
plan.pdf
(6.19 KiB) 216-mal heruntergeladen
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Aha!
Und wie rufst Du die Funktion auf? Was ist der Maximalwert? Du denkst ja bestimmt daran, dass es natürlich nicht der rechte Rand sein kann, sondern die Differenz aus Anfang (Druckposition von links) und Maximalwert :wink:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Manfred »

Brrrr,

kein Wort verstanden. Ich denke, wenn ein Startpunkt z.B. bei 100 liegt und der nächste bei 700, dann sollte der Platz dazwischen doch erstmal 600 sein abzüglich etwas Platz vorne und hinten, oder? Also solle doch ein String von 590 rein passen und ein String von über 600 gekürzt werden. Dafür dachte ich kann ich die Funktion nutzen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Genau so!
Wenn Du jedoch sagst, der nächste Startpunkt ist 700 und die Länge ist 650, dann ab 100 druckst, läufst Du über 700.
Das meinte ich!
Bei mir geht das auch!
Abgesehen davon, sehe ich in Deiner Funktion nicht, wo Du cFahrtweg beschneidest! Wenn es zu lang ist, musst Du es ja auch kürzen!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Martin Altmann »

Hier - so mache ich das:

Code: Alles auswählen

GraStringAt( oPS, { 100, nY }, "Katalognummern:" )
GraSetFont( oPS, oFontfett )
k := alltrim( substr( saetze, 3 ) )
i := aPageSize[1] - 450
do while .not. empty( k )
	aTextBox    := GraQueryTextBox( oPS, k )
	nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
	do while nFontWidth > i
		s := 0
		do while .t.
			j := at( " ", k, s + 1 )
			if j > 0
				aTextBox    := GraQueryTextBox( oPS, left( k, j - 1 ) )
				nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
				if nFontWidth > i
					if s <> 0
						GraStringAt( oPS, { 400, nY }, left( k, s - 1 ) )
						k := substr( k, s + 1 )
					else
						GraStringAt( oPS, { 400, nY }, left( k, j - 1 ) )
						k := substr( k, j + 1 )
					endif
					s := 0
					nY -= ( nFontHeight + 2 )
					zeile ++
					aTextBox    := GraQueryTextBox( oPS, k )
					nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
					exit
				else
					s := j
				endif
			else
				aTextBox    := GraQueryTextBox( oPS, k )
				nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
				if ( nFontWidth > i ) .and. ( s <> 0 )
					GraStringAt( oPS, { 400, nY }, left( k, s - 1 ) )
					k := substr( k, s + 1 )
					nY -= ( nFontHeight + 2 )
					zeile ++
				endif
				GraStringAt( oPS, { 400, nY }, k )
				nY -= ( nFontHeight + 2 )
				zeile ++
				k := ""
				aTextBox    := GraQueryTextBox( oPS, k )
				nFontWidth  := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
				exit
			endif
		enddo
	enddo
	if .not. empty( k )
		GraStringAt( oPS, { 400, nY }, k )
		nY -= ( nFontHeight + 2 )
		k := ""
		zeile ++
	endif
enddo
if .not. empty( k )
	GraStringAt( oPS, { 400, nY }, k )
	nY -= ( nFontHeight + 2 )
	zeile ++
endif
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: GraQueryTextBox funktoniert nicht wie gewünscht

Beitrag von Manfred »

Neee, das war jetzt nur ein Beispiel. Aber wenn Du unter die Funktion schaust, dann siehst Du die Abfrage der 1000. Die sollte also nicht überschritten werden. Die Rückmeldung ist aber 598. Also wird die "Trennung" gar nicht erst angelaufen. Aber trotzdem paßt der String nicht in den Zwischenraum. Und das obwohl ein Platz von mehr als 598 vorhanden ist. Deshalb ja meine Frage.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten