Spalten ausblenden [Erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Spalten ausblenden [Erledigt]

Beitrag von stevie »

Guten Abend,

weiß jemand, wie man am besten unter Xbase 1.9 und Xclass 4.3 Spalten im Browser ausblenden kann?
Also nicht erst Spalte löschen und dann wieder neu erstellen, sondern nur verstecken und später wieder anzeigen.
Zuletzt geändert von stevie am Di, 18. Aug 2009 17:02, insgesamt 1-mal geändert.
Viele Grüße
Stevie
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Spalten ausblenden

Beitrag von Jan »

Was ist mit :hide() und :show()?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Spalten ausblenden

Beitrag von stevie »

Ist jedenfalls beim Xclass nicht enthalten.
Ich lösche jetzt einfach alle und lasse nur die angehakten neu erstellen. Is zwar nich die beste Lösung aber die einfachste.
Viele Grüße
Stevie
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Spalten ausblenden

Beitrag von brandelh »

stevie hat geschrieben:Ist jedenfalls beim Xclass nicht enthalten.
Hallo,

das kann nicht sein. :Hide() und :Show() werden vom XbpWindow() abgeleitet, sieh dir mal
den Klassenbaum von XbpColumn() an. Ich kann mir nicht vorstellen, dass Xclass nicht auf diese Klasse zurückgreift.
Gruß
Hubert
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Spalten ausblenden

Beitrag von stevie »

in 4.3 ist dsxcolumn noch eine eigene Klasse, die aus Statics zusammengesetzt wird. Hab mir per classdescribe das Ding angekuckt, da war definitiv kein show oder hide dabei, genauso wenig wie visible als Var dort existiert.
Viele Grüße
Stevie
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Spalten ausblenden

Beitrag von brandelh »

OK, ich nutze kein XClass. Auf jeden Fall sind alle Xbp-Controls (auch XbpStatic) von XbpWindow() abgeleitet.
Aber natürlich ist es möglich, dass XClass das komplett umgangen hat.
Gruß
Hubert
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Spalten ausblenden

Beitrag von stevie »

brandelh hat geschrieben:OK, ich nutze kein XClass. Auf jeden Fall sind alle Xbp-Controls (auch XbpStatic) von XbpWindow() abgeleitet.
Aber natürlich ist es möglich, dass XClass das komplett umgangen hat.
Ich sag mal so, die Spalten sind fest im Browser verankert und können nur durch ein destroy entfernt werden.
Viele Grüße
Stevie
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Spalten ausblenden

Beitrag von Lewi »

Hallo Steve,
die Spaltenbreite läßt sich über dsXColumn:SetWidth()zur Laufzeit beinflussen.

Wenn Du eine ganze Spalte ausblenden willst, wirst Du nicht umhin kommen, den Browser neu aufzubauen und dies mittles :rebuild() zur Anzeige zu bringen. Wenn allerdings die Spalte samt Spaltenheader fehlt, kann die Spalte ja nicht wieder z.B. über den Spaltenheader aktiviert werden. Es könnte aber über das Kontext-Menu die an- bzw. erfolgen.

Gruß, Olaf
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Re: Spalten ausblenden

Beitrag von stevie »

also ich hab mir ein kleines Fenster mit der Spaltenauswahl gemacht, welches durch Rechtsklick auf einen Spaltenheader geöffnet wird. Du meinst also, wenn ich die Spaltenbreite dann einfach auf 0 setze ist die ja auch ausgeblendet und würde dann bei Wiederaktivierung der entsprrechenden Checkbox wieder auf Originalbreite gesetzt. Richtig?
Viele Grüße
Stevie
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Spalten ausblenden

Beitrag von Lewi »

Würde ich jetzt mal vermuten. Warsscheinlich wird ein oBrowse:Repaint() nötig sein, wenn bei oBrowse:RefreshAll() keine Änderung erfolgt.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Spalten ausblenden [Erledigt]

Beitrag von Herbert »

Obwohl erledigt eine Ergänzung dazu.

Ich lasse den User vorgängig in einem eigenen Dialog entscheiden, welche Felder in welcher Reihenfolge und welcher Breite erscheinen sollen. Dies schreibe ich in eine DB.
Beim Aufbau des Browse-Objekts durchlaufe ich dann diese Datenbank.
Funktioniert mit oder ohne XClass.

Code: Alles auswählen

...
// Aufbau des Browse-Fensters
aFelder := GetDbFelder(nPr,1)
...
// Browse aufbauen
  oBrowse := ...
...
// Felder füllen
  FOR i:=1 TO LEN(aFelder)   // nicht mehr 2
    nbr := IIF(VAL(aFelder[i,4])=0,VAL(aFelder[i,8]),VAL(aFelder[i,4]))   // Breite - defbreite
    cDataLink     := LinkfromField(aFelder,i)
    oCol := dsXColumn():new( , &(cDataLink), aFelder[i,5],, ,, )
    oCol:SetWidth(nbr)
    oBrowse:addColumn(oCol ) 
  NEXT

// Einlesen der vom User gewünschten Felder
FUNCTION GetDbFelder(nPr,nnum)
LOCAL  i,aFeld:={},l,cBuf,ns:=SELECT()
// Datenbank mit Feldern öffnen
// im Array sind alle wichtigen Parameter (entsprechend der Struktur der DB)
IF  DB_OPEN(0,ppath,"Dialog2","DIA",.T.,uid)   // hier kommt noch die usernummer hinzu
  DO WHILE !EOF() 
    AADD(aFeld,{TRIM(bez),typ,"N",STR(breite,6),TRIM(titel), ;
                STR(fpos,3),TRIM(bfeld),STR(defbreite,6),TRIM(farbe),STR(indexn,1) } )
    SKIP
  ENDDO
ENDIF
USE
DbSelectArea(ns)
RETURN (aFeld)

// Datalink abhängig des Datentyps erstellen
FUNCTION LinkfromField(aFelder,nFeld)
LOCAL cDataLink,cBuf,cField,i,k,cTyp
cField := Fieldname(VAL(aFelder[nFeld,6]))   // feldnummer nehmen!
cTyp := FieldInfo(VAL(aFelder[nFeld,6]), FLD_TYPE)
DO CASE
CASE cTyp == "C"
  cBuf := "alltrim("+cField+")"
  IF UPPER(aFelder[nFeld,2])=="F"
    cBuf := aFelder[nFeld,1]
  ENDIF
  cDataLink     := "{|x| iif(X==NIL,"+cBuf+","+cField+" := x )}"
....
Grüsse Herbert
Immer in Bewegung...
Antworten