DCBROWSE mit Itemselected [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

DCBROWSE mit Itemselected [erledigt]

Beitrag von Ewald »

Hallo und schönen guten Abend Gemeinde ...
in einem DCBROWSE gebe ich dem User die Möglichkeit, per Doppelklick (itemselected) einen Eintrag in den Datensatz vorzunehmen, der die gewählte Position zur Weiterverarbeitung markiert. Das mache ich schon lange so und hatte auch noch nie Probleme - bis jetzt die Anforderung im Raum steht, auch Änderungen in der gewählten Zeile vornehmen zu können.
Wenn jetzt die Zeile mit Doppelklick markiert wird, steht der User auch sofort im Editmodus. Das möchte ich verhindern. Möglich wäre es, den EditModus mit einem Rechtsklick auf die markierte Zelle zu aktivieren. Habe es mit "edit xbeBRW_ItemRbDown" versucht. Der Versuch war nicht gut.
Hat jemand den ultimativen Rat, der mich vor weiteren 1000 Versuchen rettet ?

Code: Alles auswählen

@ 01,01 dcbrowse obrowse alias "dbfremd" size 85,20 ;
                 itemselected {||dbfremd->einspiel:=if(dbfremd->einspiel="X"," ","X"),obrowse:refreshall()};
                 edit xbeBRW_ItemSelected 
Zuletzt geändert von Ewald am Fr, 04. Sep 2009 15:43, insgesamt 1-mal geändert.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBROWSE

Beitrag von Wolfgang Ciriack »

Hallo Ewald,
ich benutze die rechte Maustaste in einem Browse, um ein Kontextmenü anzuzeigen.
Das kannst du bestimmt adaptieren.

Code: Alles auswählen

@3.8,0.5 DCBROWSE oBrowse ;
.......
EVAL {|o| o:ItemRbDown:={|aMPos,aLC,oBr| ...... }
Viele Grüße
Wolfgang
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE und itemselected [erledigt]

Beitrag von Ewald »

Hallo Wolfgang,
danke für die Hilfe, ich habe das wie folgt gelöst.
Aber - mir macht das alles irgendwie Angst :shock: ;-)

Code: Alles auswählen

@ 01,01 dcbrowse obrowse alias "dbfremd" size 89,20 ;
                 eval {|o|o:ItemRbDown:={|a,b,c|dbfremd->einspiel:=if(dbfremd->einspiel="X"," ","X"),obrowse:refreshall()  }} ;
                 edit xbeBRW_ItemSelected
Gruß
Ewald
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE

Beitrag von Tom »

Hallo, Ewald.

Deine Lösung dürfte zwei Probleme generieren: Erstens könnte man irgendwo hinklicken (einschließlich der Spaltenüberschriften), es würde sich per Rechtsklick immer der Inhalt des Feldes bzw. der Spalte "einspiel" ändern. Zudem würde sich immer nur die derzeit aktuelle (markierte) Spalte/Zeile ändern, selbst dann, wenn man in eine andere klickt. Besser: Nur in der fraglichen Spalte:

Code: Alles auswählen

DCBROWSECOL DATA {||dbfremd->einspiel} PARENT oBROWSE ... 
   EVAL {|o|o:DataArea:RbClick := {||dbfremd->einspiel:=if(dbfremd->einspiel="X"," ","X"),oBrowse:RefreshCurrent()}}
(RefreshCurrent() reicht, es sei denn, Dein Browse wertet noch irgendwie Daten aus.)

Zusätzlich kannst Du DCBROWSE selbst mit der Option RBSELECT versehen. Das würde dazu führen, dass ein Klick mit der rechten Maustaste auch die Spalte auswählt. Ohne das würde mein Codevorschlag die Zeile ändern, in deren Spalte "einspiel" man klickt, ohne die Markierung auf sie zu setzen. Auch das kann sinnvoll sein.
Herzlich,
Tom
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE mit Itemselected [erledigt]

Beitrag von Ewald »

Hallo Tom,
auch dir vielen Dank für deine Lösung.
Irgenwann fällt mir sowas (hoffentlich) selbst mal ein.
Rom wurde schließlich auch nicht an einem Tag abgebrannt.
Gruß
Ewald
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE mit Itemselected [erledigt]

Beitrag von Tom »

Rom wurde schließlich auch nicht an einem Tag abgebrannt.
Ja, gute Brandbeschleuniger kamen erst sehr viel später auf den Markt.

Rogers Befehle erzeugen ganz normale Xbase++-Objekte. Eine DCBROWSE-Spalte ist eine XbpColumn, die einen Header, einen Footer und eine Dataarea hat. Auch das sind Klassenobjekte (XbpCellGroup), deren Superklassen so gut wie immer die Standardevents berücksichtigen, also zum Beispiel RbClick (und zig andere). Diese Slots kann man mit eigenen Codeblöcken bestücken, wie in meinem Beispiel den RbClick-Slot der Dataarea. Wenn man so arbeitet, verbindet man die Eleganz und Einfachheit von Rogers Bibliothek mit quasi-echter Objektorientierung. :wink:
Herzlich,
Tom
Juergen
UDF-Programmierer
UDF-Programmierer
Beiträge: 92
Registriert: Di, 19. Dez 2006 19:37
Wohnort: Düsseldorf
Kontaktdaten:

Re: DCBROWSE mit Itemselected [erledigt]

Beitrag von Juergen »

Hallo Tom,

Deine Aussage über die Verbindung von Rogers Bibliothek mit quasi-echter Objektorientierung kann ich nur
bestätigen.

Alaska Xbase++ in Verbindung mit Express++ ist ein sehr mächtiges Werkzeug.

Ich hoffe, dass die Weiterentwicklung nicht eingestellt wird.



Gruß
Jürgen
Antworten