dcbrowsecol Breite an parent anpassen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

Hi,

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!!
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: dcbrowsecol Breite an parent anpassen

Beitrag von Tom »

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):

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
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.
Herzlich,
Tom
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: dcbrowsecol Breite an parent anpassen

Beitrag von Tom »

Aha, es geht natürlich einfacher:
oBrowse:FitColumns()
Roger hat das in seiner Klasse schon drin.

:wink:

(Die einzelnen Spaltenbreiten sollten aber vorher dennoch angegeben werden - geht ja auch nicht ohne -, um ihr Größenverhältnis festzulegen!)
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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

Beitrag von Koverhage »

wobei sich die Breite einer Col primär nach der Breite des Headers richtet.
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

@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.
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
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: dcbrowsecol Breite an parent anpassen

Beitrag von Tom »

@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:

Code: Alles auswählen

DCREAD GUI ... EVAL {||oBrowse:FitColumns()}
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.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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

Beitrag von Koverhage »

Tom,

was gerade bei DC_AutoRestoreBrowse sehr störend ist.
Gruß
Klaus
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: dcbrowsecol Breite an parent anpassen

Beitrag von Tom »

Hä?
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
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

Beitrag von Koverhage »

Wenn der Text im Header zu groß ist, funktioniert der Restore
nicht wenn der Anwender die Spalte verkleinert hat.
Gruß
Klaus
Antworten