Array browsen mit Checkbox
Verfasst: Di, 02. Feb 2016 16:35
Moin zusammen,
ich habe mich noch mal von der Couch erhoben und feile an ein paar Feinheiten
Das Einblenden des Check-Kästchens im Browse ist ja eine so schöne Sache, das ich da einfach nicht drauf verzichten will. Dabei stoße ich aber auf zwei Probleme, die ich nicht so richtig in den Griff bekomme.
Das erste Problem ist, das es einen Crash gibt, wenn das zu browsende Array leer ist. Das kann ja im Programmverlauf immer wieder auftreten und führt ohne diesen Code für die Checkbox nicht zu Problemen.
Klar, aa[nkey,16] usw. wird gesucht und wenn es das nicht gibt kracht es.
Im Moment durchforste ich die Quellcodes wo das vorkommen kann und belege das Array mit einem Dummy Element vor. Eine schlechte Lösung.
Besser wäre es, wenn ich diese Zeile inaktiv stellen könnte wenn das Array leer ist. Aber wo und wie kann ich das machen ???
Und das zweite Problem ist, das ich mich irgendwie nicht gegen einen Mausklick wehren kann. In diesem Beispiel sollte die Checkbox nur gewählt werden können, wenn das 7. Element des Arrays leer ist. Wenn ich das
aber richtig sehe, hat protect keine Auswirkungen auf Mausklicks. Selbst wenn ich nur ein pures (edit)protect {||.t.} einfüge kann ich die Checkbox trotzdem anklicken und aktivieren.
Bin wie immer für jeden Tip dankbar.
Ewald
ich habe mich noch mal von der Couch erhoben und feile an ein paar Feinheiten
Das Einblenden des Check-Kästchens im Browse ist ja eine so schöne Sache, das ich da einfach nicht drauf verzichten will. Dabei stoße ich aber auf zwei Probleme, die ich nicht so richtig in den Griff bekomme.
Das erste Problem ist, das es einen Crash gibt, wenn das zu browsende Array leer ist. Das kann ja im Programmverlauf immer wieder auftreten und führt ohne diesen Code für die Checkbox nicht zu Problemen.
Klar, aa[nkey,16] usw. wird gesucht und wenn es das nicht gibt kracht es.
Im Moment durchforste ich die Quellcodes wo das vorkommen kann und belege das Array mit einem Dummy Element vor. Eine schlechte Lösung.
Besser wäre es, wenn ich diese Zeile inaktiv stellen könnte wenn das Array leer ist. Aber wo und wie kann ich das machen ???
Und das zweite Problem ist, das ich mich irgendwie nicht gegen einen Mausklick wehren kann. In diesem Beispiel sollte die Checkbox nur gewählt werden können, wenn das 7. Element des Arrays leer ist. Wenn ich das
aber richtig sehe, hat protect keine Auswirkungen auf Mausklicks. Selbst wenn ich nur ein pures (edit)protect {||.t.} einfüge kann ich die Checkbox trotzdem anklicken und aktivieren.
Bin wie immer für jeden Tip dankbar.
Ewald
Code: Alles auswählen
asize(aa,0)
aadd(aa,{NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,.f.}) // Das will ich eigentlich nicht machen
@ 05.5,00 dcbrowse ob1 data aa size 100,28 fit ;
pointer nkey ;
mark 16 ;
MKCOLOR nil,GRA_CLR_WHITE,GRA_CLR_BLUE
DCBROWSECOL DATA {|x|x:=DC_GetColArray(16,ob1), ;
IIF(x,BITMAP_CHECKBOX_CHECKED_S,BITMAP_CHECKBOX_UNCHECKED_S)} ;
PARENT ob1 HEADER 'Sel' WIDTH 1 ;
TYPE XBPCOL_TYPE_BITMAP ;
EVAL {|oB|oB:dataArea:lbClick := {|a,b,o|IIF(ob1:colPos=16,(aa[nkey,16]:=!aa[nkey,16],ob1:refreshCurrent()),nil)}} ;
protect {||if(!empty(DC_GetColArray(07,ob1)),.t.,.f.)}