Fehler - Auslesen von Textbreite eines Strings mit GraQueryTextBox()
Verfasst: Mi, 19. Jul 2017 16:32
Hi Leute, ich brauche eure Hilfe bevor ich durchdrehe -.-
Ich habe Daten in meiner Datenbank, die in einer Tabelle gedruckt werden sollen. Zur Überprüfung der Textbreite (ob der String in die Zelle passt),
nehme ich GraQueryTextBox. Hab die Funktion Gott sei Dank im Forum gefunden, sowas taucht in der Help-File natürlich wieder nicht auf...
Die Abprüfung in der Tabelle funktioniert auch, Breitenwert des Strings GraQueryTextBox(oPS, cText)[5][1].
Ziel ist es jetzt, über die Tabellenspalten Überschriften setzen zu lassen, und zwar mittig (automatisch) ohne Rumgefuchtel mit Pixelwerten. Das funktioniert auch fast.
Bild: http://imgur.com/a/WCIHs
Die erste Spalte wird nicht mittig betitelt, Grund scheint ein falsches, bzw. unverhältnismäßig großer Rückgabewert von GraQueryTextBox() (514px) für "Artikel / Leistung" zu sein. Im Vergleich: "Max.Preis" ist lediglich 160px breit. Die Pixelangaben beziehen sich natürlich auf Breite der Buchstaben, aber trotzdem scheint was nicht zu passen, denn die Spalte selbst ist 630 Pixel breit.
Nachfolgend mein Code, vllt fällt euch ja was ein, ich weiß nicht weiter...
Danke schonmal!
PS: Die Funktion ist natürlich nicht beendet, sondern nur der Teil bis zum Fehlverhalten der Funktion. Die Funktion "ftrim" ist von mir und fasst rtrim ltrim zusammen, holefonts() lädt die Fonts.
Ich habe Daten in meiner Datenbank, die in einer Tabelle gedruckt werden sollen. Zur Überprüfung der Textbreite (ob der String in die Zelle passt),
nehme ich GraQueryTextBox. Hab die Funktion Gott sei Dank im Forum gefunden, sowas taucht in der Help-File natürlich wieder nicht auf...
Die Abprüfung in der Tabelle funktioniert auch, Breitenwert des Strings GraQueryTextBox(oPS, cText)[5][1].
Ziel ist es jetzt, über die Tabellenspalten Überschriften setzen zu lassen, und zwar mittig (automatisch) ohne Rumgefuchtel mit Pixelwerten. Das funktioniert auch fast.
Bild: http://imgur.com/a/WCIHs
Die erste Spalte wird nicht mittig betitelt, Grund scheint ein falsches, bzw. unverhältnismäßig großer Rückgabewert von GraQueryTextBox() (514px) für "Artikel / Leistung" zu sein. Im Vergleich: "Max.Preis" ist lediglich 160px breit. Die Pixelangaben beziehen sich natürlich auf Breite der Buchstaben, aber trotzdem scheint was nicht zu passen, denn die Spalte selbst ist 630 Pixel breit.
Nachfolgend mein Code, vllt fällt euch ja was ein, ich weiß nicht weiter...
Danke schonmal!
Code: Alles auswählen
PROCEDURE druckeZKtarif(oPS, aSize, oPrinter) /////Zusatzkosten drucken
LOCAL titelabstand, sDocName, ersteseite, seite, cnt_titel, cnt_proSeite, cnt_rec, pos_rec, beschr, maxpreis, minpreis, flat, kgvon, kgbis, fixpreis, knr, width_titel
holefonts()
DECLARE Ueberschriften[8]
Ueberschriften[1] := "Artikel / Leistung"
Ueberschriften[2] := "Max.Preis"
Ueberschriften[3] := "Min.Preis"
Ueberschriften[4] := "Flat"
Ueberschriften[5] := "KG-von"
Ueberschriften[6] := "KG-bis"
Ueberschriften[7] := "Fixpreis"
Ueberschriften[8] := "Knr."
DECLARE Breiten[8]
Breiten[1] := 630
Breiten[2] := 205
Breiten[3] := 205
Breiten[4] := 205
Breiten[5] := 205
Breiten[6] := 205
Breiten[7] := 205
Breiten[8] := 155
sFoot := "- Seite 1 -"
mLR_Rand := 50
cnt_titel := 1
titelabstand := 0
cnt_proSeite := 1
cnt_rec := 1
pos_rec := mLR_Rand
ersteseite := .T.
seite := 1
mZeile := 500
IF temp_scope == 0
info := "Allgemeine Tarifpositionen"
sDocName := info
ELSEIF temp_scope == 1
info := "Tarifpositionen " + temp_kunname
sDocName := info
ENDIF
sDocName := info
oPrinter:startDoc(sDocName)
DO WHILE ! Eof()
IF ersteseite == .T.
PRINT_NUR_LOGO(oPS, aSize, oPrinter)
PrintTextOnPage(oPS, mLR_Rand +150, 350, info, "" , mFontTitel3, aSize)
minstart := 0
Do While cnt_titel <= 8
titel := ftrim(Ueberschriften[cnt_titel])
Msgbox("Titel: '" + titel + "'")
width_titel := GraQueryTextBox(oPS, titel)[5][1]
? GraQueryTextBox(oPS, titel)
Msgbox("Breite Titel: " + Str(width_titel))
textstart := (Breiten[cnt_titel] / 2) - (width_titel / 2)
PrintTextOnPage(oPS, mLR_Rand + minstart + textstart, mZeile - 10, titel ,"", mFontNormalText, aSize, 45)
minstart += Breiten[cnt_titel]
cnt_titel += 1
EndDo
ENDIF