AddColumn und LockUpdate

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

AddColumn und LockUpdate

Beitrag von Tom »

Ich habe komplexe, monatsbezogene Browses (für Planungssysteme), die Tagesspalten enthalten (1 ... 31), dazu links einen Anteil fixierter Spalten (frozen). Wenn jetzt der Monat gewechselt wird, werden ggf. Spalten gelöscht (31 Tage -> 30 Tage) oder hinzugefügt (30 Tage -> 31 Tage), was per AddColumn/DelColumn erfolgt. Da die Browses sehr komplex sind, möchte ich eigentlich nicht, dass der Benutzer quasi beim Bildschirmaufbau zusehen kann, würde also gerne oBrowse:LockUpdate(.T.) setzen, bevor das Browse aktualisiert wird, die Daten- und Spaltenänderungen vornehmen und anschließend oBrowse:LockUpdate(.F.) und oBrowse:InvalidateRect() ausführen. Das funktioniert in der Theorie ganz gut - bis auf den kleinen Makel, dass in dieser Version die ggf. hinzugefügte Spalte rechts neben den "frozen columns" erscheint (also vor Tagesspalte 1) und nicht ganz rechts, am Ende des Browses. Ohne LockUpdate ist alles fein. Kennt jemand dieses Phänomen? Oder sogar seine Ursache bzw. Lösung?
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: AddColumn und LockUpdate

Beitrag von AUGE_OHR »

hm ...
PDR 4749 sagt eigentlich : XbpBrowse():addColumn() raises error if :lockUpDate() is .T.

wer den Source hat findet ja auch die entsprechende Stelle und kann es korrigieren aber die PDR ist ja noch offen :shock:

---

ein o:Add ist ja meistens ein o:Ins wie auch bei XbpBrowse()

Code: Alles auswählen

 METHOD XbpBrowse:AddColumn( xValue, nCharWidth, xHeading, xFooting, nType )
 RETURN ::InsColumn(::ColCount+1,xValue,nCharWidth,xHeading,xFooting,nType)
man könnte also versuchen mit o:InsColumn(nPos ...) explizit festlegen wo es erscheinen soll und ob das mit o:LockUpdate(.T.) besser funktioniert.

p.s. überprüfe doch mal nach den o:Del was o:ColCount sagt wenn o:LockUpdate(.T.)
gruss by OHR
Jimmy
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Re: AddColumn und LockUpdate

Beitrag von hschmidt »

Hallo Tom,

ich beschäftige mich gerade mit der Doku der Änderungen in der Xbase-Version 2.0 und bin auf folgendes gestoßen:
XbpColumn:displayIndex
Contains the display position of the column.
Attribute: EXPORTED
Data type: Numeric (0)


Description
After a column object is added to a browse using XbpBrowse:addColumn(), this instance variable specifies the position at which the column is displayed within the browse. The display position may be different from the position of the column within the browser's column array. This is because the display order of the columns is changed when using methods such as :setLeftFrozen().

In addition, a column's display position may be changed by assigning a new position to the column's :displayIndex instance variable. This reorders the columns defined in the browse, and causes the display index of subsequent columns to be adjusted accordingly.

Note: Only scrollable columns can be reordered in this way. The display position of a column which is frozen using :setLeftFrozen() or :setRightFrozen() cannot be changed.

Vielleicht ist es das, was Du suchst.

Viele Grüße

Hans
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: AddColumn und LockUpdate

Beitrag von Tom »

Hallo, Jimmy.

Solche Tricks hatte ich auch schon probiert, ohne Erfolg. Trotzdem danke! Und der PDR, den Du verlinkt hast, der bezieht sich auf Xbase++ 1.7. Ich gehe davon aus, dass einfach vergessen wurde, den offiziell zu schließen.

Hallo, Hans.

Das wird es sein - bzw. die mögliche Lösung skizzieren. Ich werd's mal ausprobieren.

Im Übrigen funktioniert es weitgehend problemlos, wenn das LockUpdate() auf den Parent des Browses gesetzt wird. Nur beim Browse selbst gerät die Spaltenposition durcheinander, wenn es direkt gelockt ist.
Herzlich,
Tom
Antworten