Express-ler: Ändern der Fußzeile einer Browse-Column?
Moderator: Moderatoren
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Express-ler: Ändern der Fußzeile einer Browse-Column?
Hi,
weiß jemand, wie man bei einem DCBROWSE nachträglich die Fußzeile ändern kann?
Die Fußzeile wird über
DCBROWSECOL ... FOOTER ...
erzeugt.
Hintergrund:
Ich nutze die Fußzeile um Summen anzuzeigen und ändere die Werte im Browser. Dann müsste ich auch die Summe in den Fußzeilen anpassen.
Hat jemand eine Idee? (Ohne das Browse neu zu erzeugen...)
weiß jemand, wie man bei einem DCBROWSE nachträglich die Fußzeile ändern kann?
Die Fußzeile wird über
DCBROWSECOL ... FOOTER ...
erzeugt.
Hintergrund:
Ich nutze die Fußzeile um Summen anzuzeigen und ändere die Werte im Browser. Dann müsste ich auch die Summe in den Fußzeilen anpassen.
Hat jemand eine Idee? (Ohne das Browse neu zu erzeugen...)
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Code: Alles auswählen
DCBROWSECOL ... FOOTER " - " OBJECT oCol1
oCol1:footing:SetCell(1,"Text")
Herzlich,
Tom
Tom
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Wolfgang.
Nach meinem Kenntnisstand unterstützt DCBROWSECOL bei Fußzeilen (noch) keine Codeblöcke (see Docs: FOOTER <cFooter>, nicht <cbFooter>). Sofern doch (bin jetzt zu faul zum Ausprobieren), genügt natürlich eine Änderung der Codeblockbedingungen und ein oBrowse:RefreshAll().
Nach meinem Kenntnisstand unterstützt DCBROWSECOL bei Fußzeilen (noch) keine Codeblöcke (see Docs: FOOTER <cFooter>, nicht <cbFooter>). Sofern doch (bin jetzt zu faul zum Ausprobieren), genügt natürlich eine Änderung der Codeblockbedingungen und ein oBrowse:RefreshAll().
Herzlich,
Tom
Tom
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
XBP_PP_COL_FA_CAPTION.
gruss by OHR
Jimmy
ja, aber dazu muss der "Footer" auch "eingeschaltet" werden mitTom hat geschrieben:... aber die Methode zur Änderung einer Fußzeile funktioniert natürlich auch bei "plain Xbase++".Code: Alles auswählen
oCol1:footing:SetCell(1,"Text")
XBP_PP_COL_FA_CAPTION.
gruss by OHR
Jimmy
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hallo,
schon mal Danke für die Antworten...
FOOTER mit Codeblock geht ja wunderbar. Aber wie finde ich in dem Codeblock heraus, für welche Spalte der Footer-Block ausgeführt wird?
Nach meinem Verständnis, müsste der Codeblock als Parameter die "aktuelle" Spaltennummer bekommen. Ist aber nicht so...
Hintergrund ist, dass ich einen Array-Browser habe und ich in den Fußzeilen jeweils die Summe der Spalten anzeigen will. Der Daten-Array ändert sich allerdings bei manchen Events, so dass dann durch ein dc_getrefresh() der Browser neu aufgebaut wird und dann die Summen neu berechnet werden müssen.
Damit das funktioniert, müsste ich aber im Footer-Codeblock die Spalten-Nummer wissen...
Oder hat jemand eine andere Idee?
schon mal Danke für die Antworten...
FOOTER mit Codeblock geht ja wunderbar. Aber wie finde ich in dem Codeblock heraus, für welche Spalte der Footer-Block ausgeführt wird?
Nach meinem Verständnis, müsste der Codeblock als Parameter die "aktuelle" Spaltennummer bekommen. Ist aber nicht so...
Hintergrund ist, dass ich einen Array-Browser habe und ich in den Fußzeilen jeweils die Summe der Spalten anzeigen will. Der Daten-Array ändert sich allerdings bei manchen Events, so dass dann durch ein dc_getrefresh() der Browser neu aufgebaut wird und dann die Summen neu berechnet werden müssen.
Damit das funktioniert, müsste ich aber im Footer-Codeblock die Spalten-Nummer wissen...
Oder hat jemand eine andere Idee?
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
gruss by OHR
Jimmy
Markus Walter hat geschrieben: Damit das funktioniert, müsste ich aber im Footer-Codeblock die Spalten-Nummer wissen...
Code: Alles auswählen
nPos := ::browser:colpos
::Browse:getColumn(nPos):footing:inValidateRect()
::Browse:getColumn(nPos):footing:Setcell(1,STR(ntotal[1] ,11,2),,.T.)
Jimmy
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hallo Jimmy,
leider enthält :colpos die Spaltennummer, in der sich der Cursor befindet, nicht der Spalte, die gerade "aufgebaut" wird.
Ich habe eine Browse mit 20 Spalten, die jeweils numerische Werte haben, diese Werte ändern sich durch eine Combobox neben dem Browse. Immer dann müsste ich die Summen aus allen Spalten (Arrays) kalkulieren. Das klappt auch, aber im Footer-Codeblock (Express++), der auch pro Spalte einmal ausgeführt wird, müsste ich wissen, in welcher Spalte ich gerade bin, damit ich die richtigen Werte aus dem Array addieren kann.
colpos liefert aber leider die Spalte, in der der Cursor steht (immer 1)...
leider enthält :colpos die Spaltennummer, in der sich der Cursor befindet, nicht der Spalte, die gerade "aufgebaut" wird.
Ich habe eine Browse mit 20 Spalten, die jeweils numerische Werte haben, diese Werte ändern sich durch eine Combobox neben dem Browse. Immer dann müsste ich die Summen aus allen Spalten (Arrays) kalkulieren. Das klappt auch, aber im Footer-Codeblock (Express++), der auch pro Spalte einmal ausgeführt wird, müsste ich wissen, in welcher Spalte ich gerade bin, damit ich die richtigen Werte aus dem Array addieren kann.
colpos liefert aber leider die Spalte, in der der Cursor steht (immer 1)...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
XBPBRW_CURSOR_ROW hast.
gruss by OHR
Jimmy
hab kein Express++, aber das passiert eigendlich nur wenn duMarkus Walter hat geschrieben: leider enthält :colpos die Spaltennummer, in der sich der Cursor befindet, nicht der Spalte, die gerade "aufgebaut" wird.
...
colpos liefert aber leider die Spalte, in der der Cursor steht (immer 1)...
XBPBRW_CURSOR_ROW hast.
gruss by OHR
Jimmy
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hi,
ich glaube wir reden aneinander vorbei...
Aus der Xbase-Dokumentation:
Ich habe jetzt eine Lösung erarbeitet, aber nun habe ich das Problem mit der Zählerübergabe an Codeblöcke...
ich glaube wir reden aneinander vorbei...
Aus der Xbase-Dokumentation:
Der Curso befindet sich in meinem Falle ja in der ersten Spalte. Dann ändere ich die Datengrundlage (Array) und führe ein refresh durch. Dadurch werden alle Spalten neu aufgebaut (und auch die benötigten Footer-Codeblöcke ausgeführt). Aber der Cursor steht halt immer noch in der 1 Spalte und folgerichtig gibt :colpos immer 1 zurück...Die Instanzvariable :colPos enthält einen numerischen Wert. Er entspricht der Ordinalposition der Spalte, in der sich der Cursor gerade befindet.
Ich habe jetzt eine Lösung erarbeitet, aber nun habe ich das Problem mit der Zählerübergabe an Codeblöcke...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
"Koordinaten" eines "2-Dim" Array ?
einem "refresh" EVALuiert wird.
gruss by OHR
Jimmy
aha ... klar 1=1 ...aber wenn du im Array arbeitetes hast du doch dieMarkus Walter hat geschrieben:Hi,
Der Curso befindet sich in meinem Falle ja in der ersten Spalte. Dann ändere ich die Datengrundlage (Array) und führe ein refresh durch. Dadurch werden alle Spalten neu aufgebaut (und auch die benötigten Footer-Codeblöcke ausgeführt). Aber der Cursor steht halt immer noch in der 1 Spalte und folgerichtig gibt :colpos immer 1 zurück...
"Koordinaten" eines "2-Dim" Array ?
kannst auch den :cargo slot benutzten um dort was abzulegen was beiIch habe jetzt eine Lösung erarbeitet, aber nun habe ich das Problem mit der Zählerübergabe an Codeblöcke...
einem "refresh" EVALuiert wird.
gruss by OHR
Jimmy
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hi Jimmy,
ich hatte ja von Anfang an eine Lösung im Auge. Ich erzeuge die Spalten in einer Schleife und brauchte ja nur die Schleifenvariable im Footer-Codeblock. Aber da begann das Problem: Der Codeblock merkt sich die Referenz zur Schleifenvariablen, greift aber erst bei der Ausführung darauf zu. Dann ist diese Variable aber bereits hochgezählt...
Mein Code war:
In diesem Falle war i bei der Ausführung aller Codeblöcke gleich, nämlich 11.
Andreas und Martin haben mich dann auf den richtigen Weg gebracht:
Somit ist mein Problem gelöst und die Footer-Codeblöcke arbeiten jetzt wie gewünscht...
Danke nochmal für die Mühe.
ich hatte ja von Anfang an eine Lösung im Auge. Ich erzeuge die Spalten in einer Schleife und brauchte ja nur die Schleifenvariable im Footer-Codeblock. Aber da begann das Problem: Der Codeblock merkt sich die Referenz zur Schleifenvariablen, greift aber erst bei der Ausführung darauf zu. Dann ist diese Variable aber bereits hochgezählt...
Mein Code war:
Code: Alles auswählen
for i := 1 to 10
aadd(aBlocks, {|| MyFunction(i) })
next
Andreas und Martin haben mich dann auf den richtigen Weg gebracht:
Code: Alles auswählen
aadd(aBlocks, &"{|| MyFunction("+str(i)+") }")
Danke nochmal für die Mühe.
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz