Spalten ausblenden [Erledigt]
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Spalten ausblenden [Erledigt]
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.
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
Stevie
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Spalten ausblenden
Was ist mit :hide() und :show()?
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Re: Spalten ausblenden
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.
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
Stevie
- brandelh
- 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
Hallo,stevie hat geschrieben:Ist jedenfalls beim Xclass nicht enthalten.
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
Hubert
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Re: Spalten ausblenden
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
Stevie
- brandelh
- 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
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.
Aber natürlich ist es möglich, dass XClass das komplett umgangen hat.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Re: Spalten ausblenden
Ich sag mal so, die Spalten sind fest im Browser verankert und können nur durch ein destroy entfernt werden.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.
Viele Grüße
Stevie
Stevie
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Re: Spalten ausblenden
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
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
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Re: Spalten ausblenden
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
Stevie
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Re: Spalten ausblenden
Würde ich jetzt mal vermuten. Warsscheinlich wird ein oBrowse:Repaint() nötig sein, wenn bei oBrowse:RefreshAll() keine Änderung erfolgt.
- Herbert
- 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]
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.
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...
Immer in Bewegung...