XbpColumn Header-Breite überschreibt Spalten-Breite? [erl]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
DelUser01

XbpColumn Header-Breite überschreibt Spalten-Breite? [erl]

Beitrag von DelUser01 »

Hallo

komme an einer Stelle nicht weiter:
Größere Textlänge des Header-Caption überschreibt Angabe der Spaltenbreite!?
- Tabelle mit XbpBrowse()
- Spalten mit XbpColumn()
- die Spaltenbreite gebe ich an
- den Header-Caption gebe ich an

Wenn nun der Header-Caption länger ist als die Spaltenbreite wird die angegebene Spaltenbreite ignoriert und die Breite des HA-Caption verwendet. Bsp.:

Code: Alles auswählen

Local aPP := {}
AAdd( aPP , { XBP_PP_COL_HA_CAPTION , "1234567890" } )
AAdd( aPP , { XBP_PP_COL_DA_CHARWIDTH , 5 }  )
oColumn := BrowXbpColumn():New( oBrowse , , , , aPP )
Ich erwarte jetzt, dass die Spaltenbreite 5 Zeichen beträgt und der längere Headertext abgeschnitten wird.
Das ist aber nicht so: die Spalte wird 10 Zeichen breit dargestellt.

Weiß da jemand Rat? ich möchte den Header nicht zusammenschneiden.
Zuletzt geändert von DelUser01 am Fr, 24. Okt 2014 18:00, insgesamt 1-mal geändert.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von Tom »

Das ist Standardverhalten. Ich nehme an, dass mit GraQueryTextBox() ermittelt wird, wie breit der Header sein muss, und das wird eben verwendet, wenn die konfigurierte Spaltenbreite geringer ist.

Fragt sich, warum man einen breiten Header angibt, wenn man doch nicht will, dass er angezeigt wird.

Die Spaltenbreiten kannst Du aber später mit SetSize() verändern.
Herzlich,
Tom
DelUser01

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von DelUser01 »

Hallo Tom

würde eher sagen Standard-"fehl-"verhalten.
Wenn ich die Breite angeben kann diese aber ignoriert wird ist das doch nicht OK.
Wenn das auch bei SLE so wäre würde das tolle Fensterinhalte hervorbringen...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:würde eher sagen Standard-"fehl-"verhalten.
das würde voraus setzten das XbpColumn() / XbpBrowse() ein Standart Windows Control wäre was es aber nicht ist.

p.s. bei Listview funktioniert es und der Text wird abgeschnitten wenn es länger ist als die gewünschte Breite.
gruss by OHR
Jimmy
DelUser01

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von DelUser01 »

Hallo Tim und Jimmy

hätte kein Problem damit - ärgern tue ich mich darüber, dass es - wenn es schon ein Standardverhalten ist - nirgends in der Doku steht und ich mich damit herumplage weil ich es einfach nicht zum Laufen bringe...
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von Tom »

Hallo, Roland.

Du verwendest offenbar eine eigene Funktion "BrowXpbColumn", die das Hinzufügen der Spalten übernimmt. In der könntest Du einfach die angegebene Spaltenbreite mit dem Ergebnis von GraQueryTextBox() für den Header und die gesetzte Standardschrift vergleichen - und die Headercaption so lange verkürzen, bis die Breite der Textbox kleiner als die Spaltenbreite ist oder ihr entspricht. Dafür wiederum wäre eine weitere Funktion hilfreich, die ein verstecktes Textstatic mit der entsprechenden Schriftart erzeugt und für den Micro-PS dieses Statics dann GraQueryTextBox() ermittelt:

Code: Alles auswählen

FUNCTION MyTextWidth(cText,cFont)
LOCAL oStatic := XbpStatic():New(AppDeskTop()), nBreite, aSize
oStatic:SetFontCompoundName(cFont)
aSize := GraQueryTextBox(oStatic:LockPS(),cText)
nBreite := aSize[3,1] - aSize[1,1]
oStatic:UnlockPS()
oStatic:Destroy()
return nBreite
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von Jan »

Roland,

ich würde erwarten das der Spaltenheader ähnlich arbeitet wie bei einem Static - ist der Text zu lang wird der gekürzt und um "..." ergänzt.

Schick doch mal ein Ticket an Alaska. Till wird da sicher ein Wort zu sagen können.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von DelUser01 »

Schneide eben den Header ab dass es geht...

@Tom
Es geht nicht darum den Header-Text auf die gewünschte Breite zu kürzen sondern wie Jan schreibt die Kürzung vom System selbst gemacht wird auf die mögliche Textbreite der Spalte. Und wenn der Benutzer die Spalte breiter macht taucht dann eben mehr Text im Spaltenheader auf.
Bei den großen Bildschirmen sieht es einfach doof aus wenn ich z.B. eine Spalte habe in der nur ein "X" steht, diese Spalte 5 cm breit ist und im Header z.B. nur "A" steht statt "Ausgeblendeter Eintrag".
Wird das gleiche in einem kleinen Fenster angezeigt soll eben der Headertext entsprechend dem vorhandenen Platz abgeschnitten werden.
Aber warum schreibe ich das eigentlich alles... habe eben erwartet, dass sich der Header genauso verhält wie die weiteren Spalten darunter (zumal ich eine Breite angeben darf...).

@Jan
Habe schon mit Hr. Herdt telefoniert. Müsste über einen Weg möglich sein. XbpCellGroup und ReferenceString oder so...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:Schneide eben den Header ab dass es geht...
...
Habe schon mit Hr. Herdt telefoniert. Müsste über einen Weg möglich sein. XbpCellGroup und ReferenceString oder so...
warum machst du das nicht einfach mit Ownerdraw ... da hast "du" die Kontrolle darüber was gemalt wird.
gruss by OHR
Jimmy
DelUser01

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von DelUser01 »

Hallo Jimmy
AUGE_OHR hat geschrieben:warum machst du das nicht einfach mit Ownerdraw ...
...was ist jetzt schon wieder "Ownerdraw"? 8)

Bin ja froh wenn ich das Browse-Zeugs mit Basis-Funktionen in den Griff bekomme.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von Tom »

was ist jetzt schon wieder "Ownerdraw"
Die Möglichkeit, Inhalte von Controls selbst zu zeichnen, was für Statics, Listboxen, Browses und ein paar andere geht. Damit kann man z.B. Browses gestalten, die innerhalb einer Spalte verschiedene Datentypen enthalten, an beliebigen Stellen Icons unterbringen, mit Gradienten spielen und weiß der Geier was noch.

Tatsächlich aber würde das nichts ändern, da die Spaltenbreite im Moment des AddColumn() festgelegt wird. :wink:
Herzlich,
Tom
DelUser01

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von DelUser01 »

Vielleicht wäre das noch eine Möglichkeit:
Zuerst als Header-Text z.B. Space(1) verwenden und nachdem die Tabelle erstellt ist den tatsächlichen Header-Text "reinschieben". Habe aber keine Möglichkeit gefunden den Header-Text nachträglich zu ändern.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von Jan »

Als die Themes noch nicht sauber unterstützt wurden habe ich mir die Header als Statics selber gebaut. Den Browse-Header raus, statt dessen den Static rein. Damit passt dann die Caption wieder sauber rein, denn beim Static wird das ja korrekt umgesetzt.

Hat aber natürlich den Nachteil, das man bei Änderungen der Spaltenbreiten die Statics von Hand nachführen muß ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von AUGE_OHR »

Tom hat geschrieben:Tatsächlich aber würde das nichts ändern, da die Spaltenbreite im Moment des AddColumn() festgelegt wird. :wink:
ok ... aber man könnte beim "malen", mit GraQueryTextBox(), die Grösse feststellen und dann den Text "abschneiden"
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von Tom »

Hallo, Jimmy.

Wenn man Spaltenbreiten verändert, geschieht ja genau das.

Das Problem ist, dass im AddColumn() eine Spaltenbreite errechnet wird, die dann auch erstmal zur Anzeige kommt.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von brandelh »

Wer eine (1.90.x ?) Prof.Sub. hat, hat auch den Quellcode zu XbpBrowser(), eventuell sollte man den etwas erweitern.
Wer erst mit der 2.0 eingestiegen ist, Alaska fragen ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:Vielleicht wäre das noch eine Möglichkeit:
Zuerst als Header-Text z.B. Space(1) verwenden und nachdem die Tabelle erstellt ist den tatsächlichen Header-Text "reinschieben". Habe aber keine Möglichkeit gefunden den Header-Text nachträglich zu ändern.
hm ... probiere mal das

Code: Alles auswählen

oBrowse:getColumn(nnn):heading:setCell()
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von Tom »

Hallo, Hubert.
Wer eine (1.90.x ?) Prof.Sub. hat, hat auch den Quellcode zu XbpBrowser(), eventuell sollte man den etwas erweitern.
Geile Idee! Unbedingt machen! Und ich will die Ergebnisse sehen! :D

Tatsächlich ist dieser Quellcode unvollständig, hilft also nicht.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpColumn Header-Breite überschreibt Spalten-Breite?

Beitrag von brandelh »

Tom hat geschrieben:Tatsächlich ist dieser Quellcode unvollständig, hilft also nicht.
Schade, ich habe mir das nie angetan, aber dummerweise geglaubt es wäre der veröffentlichte Stand ;-)
Gruß
Hubert
DelUser01

Re: XbpColumn Header-Breite überschreibt Spalten-Breite? [er

Beitrag von DelUser01 »

Hallo Jimmy

ich glaube es ja nicht - so geht es tatsächlich:

Code: Alles auswählen

Local aPP := {}
AAdd( aPP , { XBP_PP_COL_HA_CAPTION   , "" } )
AAdd( aPP , { XBP_PP_COL_DA_CHARWIDTH , nSpaltenbreite }  )
oColumn := BrowXbpColumn():New( oBrowse , , , , aPP )
usw...
oBrowse:AddColumn( oColumn )
oBrowse:GetColumn( nColumn ):Heading:SetCell( 1 , cHeaderText )
Was Du alles weißt! =D>
So lass ich das jetzt.

PS.: 1-Stellige Spalten mit längerem Header-Text sollten auf mind. 2 Stellen vergrößert werden wegen den angehängten ... Punkten bei gekürzter Wiedergabe.
Antworten