XbpBrowse
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XbpBrowse
Jimmy,
was soll ich mit 2 dbf im Browse anfangen? Ich will genau eine im Browse haben, die Protokolldatei. Die andere interessiert mich nicht hier.
Jan
was soll ich mit 2 dbf im Browse anfangen? Ich will genau eine im Browse haben, die Protokolldatei. Die andere interessiert mich nicht hier.
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: 164
- Registriert: Mo, 09. Jan 2006 17:06
- Wohnort: Paderborn
- Hat sich bedankt: 2 Mal
- Kontaktdaten:
Re: XbpBrowse
Hallo Jan,
Zum Beispiel so:
Das ist so nicht getestet, sollte aber Funktionieren. Ich mache mir dabei zunutze, dass im 2. Parameter das Column-Objekt übergeben wird.
Viele Grüße
Hans
Ich würde den ColorBlock nicht in einer Zeile formulieren, sondern eine Funktion benutzen (wenn Du nicht mit Klassen und Methoden arbeiten willst.Jan hat geschrieben:So sieht beim Code im Moment aus:
Wie üblich bei mir nix KlassenCode: Alles auswählen
FOR i := 1 TO Len(aWalaStruktur) oSpalte := XBPColumn():new(oDlgAppWalasi, , , , {{XBP_PP_COL_HA_CAPTION, aWalaStruktur[i][1]}, ; {XBP_PP_COL_DA_ROWWIDTH, aWalaStruktur[i][3] * 8}}) // Eine neue Spalte hinzufügen oSpalte:ColorBlock := {|x, a, n| IIF(n > 1 .AND. oSpalte:DataArea:GetCell(n - 1) == oSpalte:DataArea:GetCell(n), ; {GRA_CLR_BLACK, GRA_CLR_BACKGROUND}, ; {GRA_CLR_WHITE, GRA_CLR_BLUE})} oSpalte:dataLink := &("{|x| walasi->" + aWalaStruktur[i][1] + "}") // Den Datalink auf das Feld stellen oSpalte:create() // Das Objekt erstellen oBrowseProtokollWala:addColumn(oSpalte) // Die Spalte dem Browse hinzufügen NEXT
aWalaStruktur ist aus DbStruct().
Jan
Zum Beispiel so:
Code: Alles auswählen
oSpalte:ColorBlock := {|xValue,oCol,nRow|SetCellColor (xValue,oCol,nRow)}
FUNCTION SetCellColor (xValue, oCol, nRow)
LOCAL aColor := {GRA_CLR_BLACK, GRA_CLR_BACKGROUND}
IF oCol:getCell(MAX(nRow -1,1)) <> xValue
aColor := {GRA_CLR_WHITE, GRA_CLR_BLUE})
ENDIF
RETURN aColor
Viele Grüße
Hans
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XbpBrowse
Hallo Hans,
wenn das komplizierter wird lagere ich solche Dinge in der Tat in Funktionen aus. Sonst verliert man total die Übersicht über was und wo und wo wie viele Klammern, und debuggen geht natürlich auch nicht.
Aber hier ist das nur eine einfache If-Abfrage, das ist mir noch übersichtlich genug das direkt im Codeblock zu erledigen. Im Gegenteil, das würde mir persönlich sogar unübersichtlicher werden diesen kleinen Codeschnippsel auszulagern.
Und ja - ich bin hier dafür bekannt, das ich nicht in Klassen denke. Geschweige denn selber welche schreibe. Alle Bekehrungsversuche sind bislang gescheitert
Jan
wenn das komplizierter wird lagere ich solche Dinge in der Tat in Funktionen aus. Sonst verliert man total die Übersicht über was und wo und wo wie viele Klammern, und debuggen geht natürlich auch nicht.
Aber hier ist das nur eine einfache If-Abfrage, das ist mir noch übersichtlich genug das direkt im Codeblock zu erledigen. Im Gegenteil, das würde mir persönlich sogar unübersichtlicher werden diesen kleinen Codeschnippsel auszulagern.
Und ja - ich bin hier dafür bekannt, das ich nicht in Klassen denke. Geschweige denn selber welche schreibe. Alle Bekehrungsversuche sind bislang gescheitert
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.
- 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
Re: XbpBrowse
hm ... hin- / her- skippen und dann noch ein refreshAll() ...Jan hat geschrieben:was soll ich mit 2 dbf im Browse anfangen? Ich will genau eine im Browse haben, die Protokolldatei. Die andere interessiert mich nicht hier.
schon erstaunlich das du 2 x Browse ablehnst obwohl du gar nicht weisst was vorschlagen will ...
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XbpBrowse
Jimmy,
ich skippe nicht. Und ich muß nur eine einzige dbf browsen. Was also soll ich da mit einem zweiten Browse anfangen?
Jan
ich skippe nicht. Und ich muß nur eine einzige dbf browsen. Was also soll ich da mit einem zweiten Browse anfangen?
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.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2832
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 98 Mal
- Danksagung erhalten: 13 Mal
Re: XbpBrowse
Hallo, Jan -
ich denke, ich weiss, was Jimmy Dir vorschlagen will:
Du hast einen Browse mit einer DBF. Du öffnest die zweite DBF unter einem anderen Alias und in der (selbstgeschriebenen) Skipper-Routine bewegst Du die beiden DBFs mit einem Versatz von einem Datensatz, d.h. die zweite DBF-Datei ist immer auf einem um eins kleiner recno():
AnzeigeDBF Satz #1
parallel DBF Satz #0
AnzeigeDBF Satz #2
parallel DBF Satz #1
...
AnzeigeDBF Satz #735
parallel DBF Satz #734
etc.
Dadurch kannst Du durch einen einfachen Vergleich auf die zweite DBF sehen, ob sich was verändert hat.
ich denke, ich weiss, was Jimmy Dir vorschlagen will:
Du hast einen Browse mit einer DBF. Du öffnest die zweite DBF unter einem anderen Alias und in der (selbstgeschriebenen) Skipper-Routine bewegst Du die beiden DBFs mit einem Versatz von einem Datensatz, d.h. die zweite DBF-Datei ist immer auf einem um eins kleiner recno():
AnzeigeDBF Satz #1
parallel DBF Satz #0
AnzeigeDBF Satz #2
parallel DBF Satz #1
...
AnzeigeDBF Satz #735
parallel DBF Satz #734
etc.
Dadurch kannst Du durch einen einfachen Vergleich auf die zweite DBF sehen, ob sich was verändert hat.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XbpBrowse
Hallo Georg,
der Vorschlag hat sicher was für sich. Aber dann skippe ich ja doch wieder wild in der df rum. Das was Hans und Tom und Hubert ausgearbeitet haben kommt ohne das aus. Ich muß zwar das :refreshAll() in Kauf nehmen, aber ich spare mir das skippen in der dbf. Und ich spare mir auch eine Menge zeit im Aufbau der Braowses: Die dbf hat ca. 120 Felder. Alleine bis all die Spalten aufgebaut sind vergeht tierisch viel Zeit. Und das doppelt machen? Im Endeffekt haben beide Varianten ihre Vor- und Nachteile, ich muß es einfach abwägen. Und habe mich für die Variante ohne Skip entschieden.
Abgesehen davon: Es ist ja schön, das Du diesen Vorschlag von Jimmy aufgreifst und ausbreitest. Aber hätte Jimmy gleich in seiner ersten Antwort zumindest mal angedeutet worauf er hinaus will, dann hätten wir uns hier einige Postings sparen können.
Jan
der Vorschlag hat sicher was für sich. Aber dann skippe ich ja doch wieder wild in der df rum. Das was Hans und Tom und Hubert ausgearbeitet haben kommt ohne das aus. Ich muß zwar das :refreshAll() in Kauf nehmen, aber ich spare mir das skippen in der dbf. Und ich spare mir auch eine Menge zeit im Aufbau der Braowses: Die dbf hat ca. 120 Felder. Alleine bis all die Spalten aufgebaut sind vergeht tierisch viel Zeit. Und das doppelt machen? Im Endeffekt haben beide Varianten ihre Vor- und Nachteile, ich muß es einfach abwägen. Und habe mich für die Variante ohne Skip entschieden.
Abgesehen davon: Es ist ja schön, das Du diesen Vorschlag von Jimmy aufgreifst und ausbreitest. Aber hätte Jimmy gleich in seiner ersten Antwort zumindest mal angedeutet worauf er hinaus will, dann hätten wir uns hier einige Postings sparen können.
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.
- 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
Re: XbpBrowse
ich kenne dich ja wie du dich in eine (mögliche) Lösung verbeisst ...Jan hat geschrieben:Abgesehen davon: Es ist ja schön, das Du diesen Vorschlag von Jimmy aufgreifst und ausbreitest. Aber hätte Jimmy gleich in seiner ersten Antwort zumindest mal angedeutet worauf er hinaus will, dann hätten wir uns hier einige Postings sparen können.
es geht doch um die mögliche Darstellung von "ähnlichen" aber nicht gleichen Datensätzen welche man optisch kennzeichnen will.
ich vermute mal das du dir keine Gedanken über einen Indexe auf die Protokoll Datei gemacht hast ... zum "erfassen" auch nicht Notwendig.
geht es aber um die "Auswertung" dann wäre ein Index, womit man "ähnliche" zusammenfassen könnte, eine Überlegung wert ...
nun könnte man "geänderte Duplikate" kennzeichnen oder deleten ... oder mit UNIQUE arbeiten.
im 1st Browse würde ich nur die "aktiven" Datensätze darstellen und im 2nd Fenster dann die "geänderten"
btw. ein "Report" Modul wäre am elegantesten wo die "aktiven" in der Liste stehen und man bei "geänderten" ein "+" davor hätte
um die geänderten Datensätze im "Tree" des selben Control einzublenden.
in beiden Fällen würde ich die "geänderten" erst dann "on-fly" zusammenstellen / auswerten / markieren.
der o:Stableblock ist zwar die richtige Stelle zum "auslösen" ... aber wenn ein Browse "stable" ist solle der Pointer NICHT mehr ( in dem ALIAS ) bewegt werden.
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XbpBrowse
Jimmy,
zumindest in diesem Fall habe ich mich nicht in eine Lösung "verbissen": Ich hatte ja erst die Lösung von Tom versucht mit vielem Skippen. Und dann das von Tom modifizierte Beispiel von Hans.
Aber entweder versteh ich nicht, worauf Du hinaus willst. Oder Du hast die Vorgehensweise nicht verstanden. Es gibt eine dbf, in der jedes Mal, wenn in der eigentlichen dbf irgend ein Feld geändert wird, der komplette geänderte Satz in eine Protokolldatei weggeschrieben wird. Wenn man jetzt sehen möchter wer wann was geändert hat, wird auf die Protokolldatei ein Scope auf den eindeutigen Bezeichner des Satzes in der eigentlichen dbf gelegt, damit nur Änderungssätze hierfür angezeigt werden. Das können mehrere Dutzend sein. Und hier soll dann jeweils das Feld farbig markiert sein, das gegenüber der Vorversion geändert ist. Das betrifft ca. 120 Felder. Soll heißen: In jedem Satz wird mindestens eines von 120 Feldern farbig markiert, weil das anders ist als in der Vorversion, die ja im Satz direkt dadrüber steht.
Jan
zumindest in diesem Fall habe ich mich nicht in eine Lösung "verbissen": Ich hatte ja erst die Lösung von Tom versucht mit vielem Skippen. Und dann das von Tom modifizierte Beispiel von Hans.
Aber entweder versteh ich nicht, worauf Du hinaus willst. Oder Du hast die Vorgehensweise nicht verstanden. Es gibt eine dbf, in der jedes Mal, wenn in der eigentlichen dbf irgend ein Feld geändert wird, der komplette geänderte Satz in eine Protokolldatei weggeschrieben wird. Wenn man jetzt sehen möchter wer wann was geändert hat, wird auf die Protokolldatei ein Scope auf den eindeutigen Bezeichner des Satzes in der eigentlichen dbf gelegt, damit nur Änderungssätze hierfür angezeigt werden. Das können mehrere Dutzend sein. Und hier soll dann jeweils das Feld farbig markiert sein, das gegenüber der Vorversion geändert ist. Das betrifft ca. 120 Felder. Soll heißen: In jedem Satz wird mindestens eines von 120 Feldern farbig markiert, weil das anders ist als in der Vorversion, die ja im Satz direkt dadrüber steht.
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.