XbpBrowse

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XbpBrowse

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Re: XbpBrowse

Beitrag von hschmidt »

Hallo Jan,
Jan hat geschrieben:So sieht beim Code im Moment aus:

Code: 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
Wie üblich bei mir nix Klassen ;-)

aWalaStruktur ist aus DbStruct().

Jan
Ich würde den ColorBlock nicht in einer Zeile formulieren, sondern eine Funktion benutzen (wenn Du nicht mit Klassen und Methoden arbeiten willst.
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
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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XbpBrowse

Beitrag von Jan »

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 :D :roll:

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: XbpBrowse

Beitrag von AUGE_OHR »

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.
hm ... hin- / her- skippen und dann noch ein refreshAll() ...

schon erstaunlich das du 2 x Browse ablehnst obwohl du gar nicht weisst was vorschlagen will ...
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XbpBrowse

Beitrag von Jan »

Jimmy,

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.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpBrowse

Beitrag von georg »

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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XbpBrowse

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: XbpBrowse

Beitrag von AUGE_OHR »

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.
ich kenne dich ja wie du dich in eine (mögliche) Lösung verbeisst ...

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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XbpBrowse

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten