Seite 1 von 1

DCBrowse mit Cell-Editing und Check-Box

Verfasst: Fr, 17. Jun 2011 10:42
von Peter Schweizer
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

Re: DCBrowse mit Cell-Editing und Check-Box

Verfasst: Fr, 17. Jun 2011 11:09
von Tom
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.

Re: DCBrowse mit Cell-Editing und Check-Box

Verfasst: Fr, 17. Jun 2011 11:56
von Peter Schweizer
Hallo Tom,
vielen Dank für die schnelle Antwort.
Hat Super geklappt.

Gruß Peter