Hallo xBase-Gemeinde,
ich habe da ein kleines Problem in einem dcbrowse.
Ich habe in der ersten Spalte einen Checkbutton (Datenbankfeld: markier C 1) mit der Anzeige eines Bitmaps abhängig ob markier Empty ist oder nicht,
daneben sind auch noch andere Spalten vorhanden, die auch für Cell-Editing freigegeben sind.
Momentan ist es so, daß ich in der ersten Spalte mit der Mouse eine Zelle markiere und anschließend über RETURN
den Status checked / unchecked hervorrufen kann.
Nun soll ich aber alternativ auch über einen Doppelklick den Status der ersten Spalte ändern können.
Dies ist mir bisher nicht gelungen !
Entweder es geht die eine Methode oder die andere aber nicht beide in Kombination.
Funktion fToggle() bzw. ret_block() ändern den Inhalt
Auszug aus meinem Code:
@ 3.5,2 DCBROWSE oSuchen ;
SIZE 78,14 ;
CURSORMODE XBPBRW_CURSOR_CELL ;
EDIT xbeBRW_ItemSelected;
MODE DCGUI_BROWSE_EDITEXIT;
ACTION {|| rec_lock()};
EXIT {|| dbunlock() };
DATALINK {|| oDlg:hide(),;
ret_block(@aDef, @oSuchen),; // markieren
oDlg:show() }
Spaltendefinition-1 für Methode RETURN:
DCBROWSECOL ;
DATA {||IF(!EMPTY(markier),7392,7393)} ;
TYPE XBPCOL_TYPE_BITMAP;
HEADER 'X';
PARENT oSuchen;
WIDTH 3;
PROTECT .F. ;
EDITOR 'LOGISCH'
@ NIL,NIL DCGET xNIL GETID 'LOGISCH' PREEVAL {|| fToggle(oSuchen,aBlock)} WHEN {||(.F.)
Spaltendefinition-1 für Methode Doppel-Klick:
DCBROWSECOL ;
DATA bSpaBlock ;
TYPE XBPCOL_TYPE_BITMAP;
HEADER aBlock[i,2];
PARENT oSuchen;
COLOR GRA_CLR_WHITE,GRA_CLR_DARKGREEN;
WIDTH aBlock[i,4];
PROTECT {|| fToggle(oSuchen,aBlock),.T.}
Was muß ich machen um beide Methoden aktiv zu haben ?
Viele grüße aus dem Schwabenland
Peter
DCBrowse mit Cell-Editing und Check-Box
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: DCBrowse mit Cell-Editing und Check-Box
Hallo, Peter.
Um zu verhindern, dass die Bitmap-Zelle vermeintlich editiert werden kann, muss die Spalte mit einem PROTECT {||.T.} versehen sein. Die Möglichkeit, den Inhalt dennoch per Klick/Doppelklick zu ändern, erreicht man in der Spalte so:
DCBROWSECOL ... EVAL {|o|o:DataArea:LbClick := {||ToggleVar(),oBrowse:RefreshCurrent()}}
und analog für LbDblClick.
Um dasselbe mit ENTER zu erreichen, muss man m.E. einen kurzen Handler schreiben, der im DCREAD referenziert wird. Dieser muss das Keyboard-Event und die Taste (ENTER) abfangen und prüfen, ob man auf der fraglichen Spalte steht (das Browse an den Handler übergeben, oBrowse:ColPos gibt an, wo man steht - und man muss prüfen, ob das Objekt, das das Event auslöst, eine Cellgroup ist). Am einfachsten ist dann, mit PostAppEvent den Klick an die Spalte zu senden.
Um zu verhindern, dass die Bitmap-Zelle vermeintlich editiert werden kann, muss die Spalte mit einem PROTECT {||.T.} versehen sein. Die Möglichkeit, den Inhalt dennoch per Klick/Doppelklick zu ändern, erreicht man in der Spalte so:
DCBROWSECOL ... EVAL {|o|o:DataArea:LbClick := {||ToggleVar(),oBrowse:RefreshCurrent()}}
und analog für LbDblClick.
Um dasselbe mit ENTER zu erreichen, muss man m.E. einen kurzen Handler schreiben, der im DCREAD referenziert wird. Dieser muss das Keyboard-Event und die Taste (ENTER) abfangen und prüfen, ob man auf der fraglichen Spalte steht (das Browse an den Handler übergeben, oBrowse:ColPos gibt an, wo man steht - und man muss prüfen, ob das Objekt, das das Event auslöst, eine Cellgroup ist). Am einfachsten ist dann, mit PostAppEvent den Klick an die Spalte zu senden.
Herzlich,
Tom
Tom
-
- Rekursionen-Architekt
- Beiträge: 153
- Registriert: Do, 06. Apr 2006 10:51
- Danksagung erhalten: 3 Mal
Re: DCBrowse mit Cell-Editing und Check-Box
Hallo Tom,
vielen Dank für die schnelle Antwort.
Hat Super geklappt.
Gruß Peter
vielen Dank für die schnelle Antwort.
Hat Super geklappt.
Gruß Peter
Gruss Peter