Seite 1 von 2

DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 11:25
von Manfred
ich habe in den Browsspalten den Parameter SORT und der ruft eine Funktion auf. Aber so wie ich es beobachte scheint das wohl nur beim neuen Aufruf zu klappen. Sobald einmal der Header mit der rechten Maustaste angeklickt wurde, wird zwar die Funktion aufgerufen, aber beim nächsten Mal um z.B. andersherum zu sortieren und dann bei jedem weiteren Rechstklick wird die Funktion nicht mehr aufgerufen. Sobald der Spaltenheader gewechselt wird, wird die Funktion wieder erstmalig aufgerufen dann aber nicht. Was soll denn der Kappes?

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 11:37
von Manfred
hm, das Zauberwort scheint wohl NODESCENDTOGGLE zu sein. Aber dann erscheint kein Pfeil mehr im Header für rauf/runter sortiert. Man kann wohl nicht alles haben...

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 13:47
von Tom
Um ein paar Sachen musst Du Dich einfach selbst kümmern. :wink:

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 13:49
von Manfred
ok, Roger muß ja irgendwas aufrufen, damit die rauf/runter Pfeile erscheinen.

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 14:08
von Manfred
ich muß mich nochmal korrigieren. Der Sort Parameter in DCBROWSECOL wird nur beim ersten Headerklick aufgerufen. Danach wohl nicht mehr. Erst wenn die Spalte verlassen wurde und eine andere sortiert, dann wird in der "neuen" Spalte ein SORT aufgerufen (wenn vorhanden) Aber auch nur beim ersten Mal. Roger scheint sich wohl zu merken, wie der erste Sortiervorgang war und dann einfach nur beim nächsten Headklick ihn umzudrehen. Wenn man also jeweils ganz andere Sortierreihenfolgen haben möchte, scheint diese Art des SORT nicht geeignet zu sein.

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 16:59
von Tom
Bei mir wird der Codeblock beliebig oft nacheinander aufgerufen, auch in der selben Spalte. Roger merkt sich ansonsten, nach welcher Spalte zuletzt sortiert wurde, und wenn das die war, in deren Header jetzt abermals geklickt wurde, werden die Navi-Codeblöcke umgedreht (DC_XbpColumn:Sort() in _DCXBROW.PRG). Manchmal muss man nach meinem Eindruck die Maus ein klitzekleines bisschen verschieben, wenn man abermals in die selbe Spaltenüberschrift klickt - vielleicht versucht er da irgendwo, einen Doppelklick abzufangen (ich habe das nicht im Code geprüft).

Der Codeblock, der SORT folgt, und der die eigentliche Sortierung enthält, bekommt als zweiten Parameter die Nummer der Spalte, nach der sortiert werden soll. Das muss nicht mit der Position des Spalteninhalts im Array übereinstimmen! Aber Du kannst im Codeblock eigentlich machen, worauf immer die Lust hast. Also auch nach Spaltenkombinationen sortieren - oder nach ganz was anderem. SORT {|a,n,o| <Sortierfunktion, 'n' ist die Nummer der zu sortierenden Spalte>}

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 17:18
von Manfred
Tom,
der Codeblock in (meinem) SORT ruft eine Funktion auf. Wenn man den Header rechtsklickt (das erste Mal) wird die Funktion im Codeblock des Sort aufgerufen. Danach kannst Du klicken bis Dir die Petersilie aus den Ohren wächst. Die Funktion wird nicht wieder aufgerufen. Das geschieht erst, wenn der Parameter NODESCENDTOGGLE angegeben wird. Dann wird der Codeblock und somit die eingebaute Funktion bei jedem Rechtsklick aufgerufen. Aber wie schon erwähnt, es fehlt dann der rauf runter Winkel im Header.
Aber vielleicht muß man noch andere Zauberformeln aufsagen, damit es anders klappt. Ich habe sie aber noch nicht gefunden.

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 18:22
von Wolfgang Ciriack
Nimme lieber LEFTBUTTON, das ist mehr Windows-like :)

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 18:25
von Manfred
bringt das irgendwelche Vorteile? Jetzt hat sich jeder an den rechten Button gewöhnt. Und ich meine irgendwas würde auch den rechten Button bestätigen als gute Wahl. Habe es aber wieder vergessen was es nochmal war.

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 18:32
von HaPe
Nimme lieber LEFTBUTTON, das ist mehr Windows-like :)
bringt das irgendwelche Vorteile?
Ich seh das wie Wolfgang.
Rechte Maustaste ist das Kontext-Menü (da kannst du das Sortieren auch anbieten), links liegen die zugehörigen Funktionen drunter.

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 18:47
von Wolfgang Ciriack
der Codeblock in (meinem) SORT ruft eine Funktion auf. Wenn man den Header rechtsklickt (das erste Mal) wird die Funktion im Codeblock des Sort aufgerufen. Danach kannst Du klicken bis Dir die Petersilie aus den Ohren wächst. Die Funktion wird nicht wieder aufgerufen. Das geschieht erst, wenn der Parameter NODESCENDTOGGLE angegeben wird. Dann wird der Codeblock und somit die eingebaute Funktion bei jedem Rechtsklick aufgerufen. Aber wie schon erwähnt, es fehlt dann der rauf runter Winkel im Header.
Na ja, wenn du NODESCENDTOGGLE hast, warum sollte dann ein Richtungspfeil da sein ? Sortiert ist sortiert. Wenn du es nicht drin hast, dann sollte jeder Klick in den Header die Sorierung ändern, einmal auf- einmal abwärts. Und das beliebig oft. So ist das jedenfalls bei mir. Evtl. solltest du noch mal einen Blick auf DC_BrowseSort() werfen, damit kannst du auch die Farben für die Header (ausgewählt, sortierbar, nicht sortierbar) setzen.

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 19:02
von Manfred
Hallo Wolfgang,
das nutzt nichts. Ich denke auch, das ich mal wieder nicht verstanden werde. SORT sortiert, aber der Codeblock, der mitgegeben werden kann wird nicht jedesmal ausgeführt und deshalb ist man auf Rogers Programmierung im Hintergund angewiesen. Warum versteht das keiner? Bau doch einmal eine Funktion dort ein, und schaue es Dir an. Mache einen Breakpoint drauf. Es bringt m.E. nichts, einen Codeblock zuzulassen, wenn der nicht (jdesmal) evaluiert wird. Ich vermute einmal, ohne wird auch sortiert. Pauschal auf die Spalte. Anfangs dachte ich auch alles klappt, bis ich dann auf diesen Umstand gestossen bin.

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 19:30
von Wolfgang Ciriack
Ja, Manfred, da hast du recht.
Wenn die Spalte schon aktiv ist, dann wird nur umsortiert, der Codeblock nicht ausgeführt (ohne NODESCENDTOGGLE).
Mit NODESCENDTOGGLE wird der Codeblock jedesmal ausgeführt.
Mir reicht das ja zum sortieren. Warum benötigst du die Ausführung des Codeblocks jedesmal ?

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 19:35
von Manfred
Hi Wolfgang,
weil ich entweder was falsch programmiert habe (habe ich aber noch nicht gefunden), oder aber die Sortroutine nicht richtig klappt. Ich habe zwischendurch das Problem, das total falsch sortiert wird. Ich muß zwischendurch das Array neu aufbauen weil ich die Datenquelle wechsel.
mache das aber jedesmal nach der Neuerstellung des Arrays

Code: Alles auswählen

DC_GetBrowArray(::oBrowse,::aBrowse)                                // das muß hier hin, damit das Array angezeigt wird im Browse
          ::oBrowse:refreshAll()
das hilft aber wohl nicht. Zumindest nicht an der Stelle

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 19:44
von Wolfgang Ciriack
Dann zeig mal deinen Sort Codeblock.

Re: DCBROWSECOL und SORT

Verfasst: Mo, 04. Mär 2019 19:51
von Manfred

Code: Alles auswählen

SORT {|aMousePos, nColPos, self| oDialogZusatz:MausImKopf(nColPos,"mehrfach")}

Re: DCBROWSECOL und SORT

Verfasst: Mo, 18. Mär 2019 17:40
von Manfred
der linke Mausbutton und da erinnert Roger auch dran, kann Probleme machen, wenn man die Maus dazu benutzen will um die Spaltenbreite zu verändern. Dann greift der nämlich.

Re: DCBROWSECOL und SORT

Verfasst: Di, 19. Mär 2019 7:52
von Manfred
Hi Tom
hast Du das wirklich im Debugger mal verifiziert? Wird jedesmal der Codeblock und damit der dahinterstehene Programmcode ausgeführt? Bei mir ist es definitv nicht so. Nur wenn der Header zum ersten mal geklickt wird.
Tom hat geschrieben: Mo, 04. Mär 2019 16:59 Bei mir wird der Codeblock beliebig oft nacheinander aufgerufen, auch in der selben Spalte. Roger merkt sich ansonsten, nach welcher Spalte zuletzt sortiert wurde, und wenn das die war, in deren Header jetzt abermals geklickt wurde, werden die Navi-Codeblöcke umgedreht (DC_XbpColumn:Sort() in _DCXBROW.PRG). Manchmal muss man nach meinem Eindruck die Maus ein klitzekleines bisschen verschieben, wenn man abermals in die selbe Spaltenüberschrift klickt - vielleicht versucht er da irgendwo, einen Doppelklick abzufangen (ich habe das nicht im Code geprüft).

Der Codeblock, der SORT folgt, und der die eigentliche Sortierung enthält, bekommt als zweiten Parameter die Nummer der Spalte, nach der sortiert werden soll. Das muss nicht mit der Position des Spalteninhalts im Array übereinstimmen! Aber Du kannst im Codeblock eigentlich machen, worauf immer die Lust hast. Also auch nach Spaltenkombinationen sortieren - oder nach ganz was anderem. SORT {|a,n,o| <Sortierfunktion, 'n' ist die Nummer der zu sortierenden Spalte>}

Re: DCBROWSECOL und SORT

Verfasst: Di, 19. Mär 2019 11:34
von AUGE_OHR
Manfred hat geschrieben: Mo, 18. Mär 2019 17:40 der linke Mausbutton und da erinnert Roger auch dran, kann Probleme machen, wenn man die Maus dazu benutzen will um die Spaltenbreite zu verändern. Dann greift der nämlich.
es gibt da eine Stelle in _dcxbrow.prg

Code: Alles auswählen

IF Valtype(::sortBlock) = 'B'
  IF xOptions[6]             // was passiert hier ?    
    ::heading:lbdown := _HeaderDown( oParent, self )
  ENDIF
  ::heading:rbdown := _HeaderDown( oParent, self )
ELSEIF ::noResize
ENDIF

Re: DCBROWSECOL und SORT

Verfasst: Di, 19. Mär 2019 12:17
von Tom
Es gibt eine Option, mit der man das Zeug von der linken auf die rechte Maustaste und umgekehrt verlegen kann, Jimmy.

Manfred, bau doch einfach mal ein Beispiel.

Re: DCBROWSECOL und SORT

Verfasst: Di, 19. Mär 2019 14:00
von Manfred
Hi Tom,
was soll ich denn genau zusammenstellen, was Dir weiterhelfen würde? Wie ich den ganzen browser aufbaue? Wie die Funktion aussieht, die in dem Sort Codeblock steht?

Re: DCBROWSECOL und SORT

Verfasst: Di, 19. Mär 2019 14:02
von Tom
Juhu, Manfred.

Ich baue immer Beispiele nach, wenn Du so ein Problem skizzierst. Das ist zwar eine schöne Fingerübung, kostet aber irre viel Zeit - die habe ich im Moment nicht. Einfacher wäre es, wenn Du ein Stückchen kompilierbaren Code liefern würdest, der das Verhalten zeigt. Dann kann man leichter gemeinsam daran arbeiten, es abzuschalten. Ein Dialog mit einem Arraybrowse in eXpress++ ist ein Zehnzeiler.

Das gilt auch für Dein Multiline-Problem.

Re: DCBROWSECOL und SORT

Verfasst: Fr, 29. Nov 2019 9:13
von Manfred
es gibt noch was. Wenn man eine Spalte als DEFAULT setzt im Sort, dann wird automatisch der Header farbig unterlegt und der rauf/runter Pfeil angezeigt. Da, wie hier schon oft erwähnt, Roger dann nur die DAten aus der jeweiligen Spalte als Sort nimmt, was nicht immer zu gebrauchen ist, habe ich jetzt das DEFAULT wieder entfernt und sortiere das immer selbst. Leider wird aber dann beim Eingang in den Browser nicht der Header der "default" Spalte gemarkert. Der User weiß also dann nicht wonach sortiert wurde. Kann man dem Header auch von Hand mitteilen, das er gerade DEFAULT Sort hat und sich somit die Farbe nimmt und den Pfeil? Irgendwo muß Roger das ja hinterlegt haben....

Re: DCBROWSECOL und SORT

Verfasst: Fr, 29. Nov 2019 12:58
von Wolfgang Ciriack
Du solltest vor dem Dialog deine Daten sortieren nach der Spalte, die du möchtest, dann kannst du auch das DEFAULT bei dieser Spalte setzen. Das vorherige Sortieren der Spalte sollte ja wohl die gleiche Sortierung sein, als wenn man in den Spaltenkopf (Spalte mit DEFAULT) klickt.

Re: DCBROWSECOL und SORT

Verfasst: Fr, 29. Nov 2019 13:19
von Manfred
so habe ich das bisher gemacht, klappt aber wohl anscheinend nicht. Das Ergebnis sieht oder oder so anders aus.