dcbrowsecol Breite an parent anpassen
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
dcbrowsecol Breite an parent anpassen
Hi,
wie kann ich denn statt einer festen WIDTH Angabe für eine Browsespalte, stattdessen mich auf die Breite des Parents beziehen?
wie kann ich denn statt einer festen WIDTH Angabe für eine Browsespalte, stattdessen mich auf die Breite des Parents beziehen?
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!!
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!!
- Tom
- 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: dcbrowsecol Breite an parent anpassen
Hallo, Manfred.
Das ist nicht einfach. Es gibt den umgekehrten Weg (DCBROWSE ... FIT), der ein DCBROWSE, welche Breite auch immer hierfür angegeben wurde, dazu zwingt, die Breite einzunehmen, die sich aus allen Spaltenbreiten ergibt.
Ins Blaue (ungetestet), dürfte mit "frozen Columns" Probleme geben, außerdem kann es sein, dass dem SetSize auch noch ein SetPos folgen muss (ausprobieren, ggf. SetPosAndSize verwenden):
Edit: Um unnötiges Flackern zu verhindern, DCGET OPTIONS mit der Option "HIDE" benutzen und das oDialog:Show() im EVAL nach dem Setzen der Spaltenbreiten aufrufen!
Noch ein Edit: Rogers Column-Klasse speichert in der Instanzvariablen "dataAreaLayout" (Array) das Aussehen der Spalte. Geänderte Spaltenbreiten müssen in Position 6 und 16 eingetragen werden (oBrowse:GetColumn(i):dataAreaLayout[6] := ...), außerdem steht die Spaltenbreite noch in "origSize[1]" des Spaltenobjekts.
Das ist nicht einfach. Es gibt den umgekehrten Weg (DCBROWSE ... FIT), der ein DCBROWSE, welche Breite auch immer hierfür angegeben wurde, dazu zwingt, die Breite einzunehmen, die sich aus allen Spaltenbreiten ergibt.
Ins Blaue (ungetestet), dürfte mit "frozen Columns" Probleme geben, außerdem kann es sein, dass dem SetSize auch noch ein SetPos folgen muss (ausprobieren, ggf. SetPosAndSize verwenden):
Code: Alles auswählen
@ ... DCBROWSE oBrowse ...
DCREAD GUI EVAL {||SetColumnSizes(oBrowse)}
FUNCTION SetColumnSizes(oBrowse)
LOCAL nRefWidth := oBrowse:CurrentSize()[1], nCurrentWidth := 0, nWidthFactor := 0
FOR i := 1 TO oBrowse:ColCount // Breiten aller Spalten addieren
nCurrentWidth += oBrowse:GetColumn(i):CurrentSize()[1]
NEXT
* Verhältnisfaktor ermitteln
nWidthFactor := nRefWidth / nCurrentWidth // > 1 bedeutet, die Spalten sind schmaler, < 1 bedeutet, die Spalten sind insgesamt breiter
* jede Spaltenbreite mit dem Verhältnisfaktor multiplizieren
FOR i := 1 to oBrowse:ColCount // Breiten neu setzen
oBrowse:GetColumn(i):SetSize({oBrowse:GetColumn(i):CurrentSize()[1]*nWidthFactor,oBrowse:GetColumn(i):CurrentSize()[2]})
NEXT
RETURN nil
Noch ein Edit: Rogers Column-Klasse speichert in der Instanzvariablen "dataAreaLayout" (Array) das Aussehen der Spalte. Geänderte Spaltenbreiten müssen in Position 6 und 16 eingetragen werden (oBrowse:GetColumn(i):dataAreaLayout[6] := ...), außerdem steht die Spaltenbreite noch in "origSize[1]" des Spaltenobjekts.
Herzlich,
Tom
Tom
- Tom
- 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: dcbrowsecol Breite an parent anpassen
Aha, es geht natürlich einfacher:
(Die einzelnen Spaltenbreiten sollten aber vorher dennoch angegeben werden - geht ja auch nicht ohne -, um ihr Größenverhältnis festzulegen!)
Roger hat das in seiner Klasse schon drin.oBrowse:FitColumns()
(Die einzelnen Spaltenbreiten sollten aber vorher dennoch angegeben werden - geht ja auch nicht ohne -, um ihr Größenverhältnis festzulegen!)
Herzlich,
Tom
Tom
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2470
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dcbrowsecol Breite an parent anpassen
wobei sich die Breite einer Col primär nach der Breite des Headers richtet.
Gruß
Klaus
Klaus
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: dcbrowsecol Breite an parent anpassen
@Tom,
wo muß denn das oBrowse:fitColumn() eingefügt werden. Und was sicherlich wichtiger wäre, welche express++ Version nutzt Du? Kann es sein, dass es erst in letzter Zeit hinzugekommen ist? Ich finde keine Methode, die so heißt.
wo muß denn das oBrowse:fitColumn() eingefügt werden. Und was sicherlich wichtiger wäre, welche express++ Version nutzt Du? Kann es sein, dass es erst in letzter Zeit hinzugekommen ist? Ich finde keine Methode, die so heißt.
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!!
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!!
- Tom
- 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: dcbrowsecol Breite an parent anpassen
@Klaus: Tatsächlich wählt eXpress++ zuweilen eine größere Spaltenbreite, wenn der Text sonst nicht in den Header passen würde. FitColumn() ignoriert das aber.
@Manfred: Ich nutze (noch) 1.9.254. Darin ist es enthalten. Aufruf wäre im EVAL von DCREAD:
Wenn Du die Methode nicht hast, kannst Du meine oben skizzierte Funktion nutzen, die ohnehin exakter arbeitet, wie ich gerade festgestellt habe. Die Anmerkungen zur Speicherung der Spaltenbreiten in den Objektvariablen kannst Du getrost vergessen, solange Du nicht mit DC_AutoRestoreBrowse arbeitest.
@Manfred: Ich nutze (noch) 1.9.254. Darin ist es enthalten. Aufruf wäre im EVAL von DCREAD:
Code: Alles auswählen
DCREAD GUI ... EVAL {||oBrowse:FitColumns()}
Herzlich,
Tom
Tom
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2470
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dcbrowsecol Breite an parent anpassen
Tom,
was gerade bei DC_AutoRestoreBrowse sehr störend ist.
was gerade bei DC_AutoRestoreBrowse sehr störend ist.
Gruß
Klaus
Klaus
- Koverhage
- Der Entwickler von "Deep Thought"
- Beiträge: 2470
- Registriert: Fr, 23. Dez 2005 8:00
- Wohnort: Aalen
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dcbrowsecol Breite an parent anpassen
Wenn der Text im Header zu groß ist, funktioniert der Restore
nicht wenn der Anwender die Spalte verkleinert hat.
nicht wenn der Anwender die Spalte verkleinert hat.
Gruß
Klaus
Klaus