DCBROWSE bzw. DCBROWSECOL klick rechte Maustaste

Moderator: Moderatoren

Antworten
FrankL
Rookie
Rookie
Beiträge: 7
Registriert: Fr, 04. Sep 2009 8:38

DCBROWSE bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von FrankL »

Hallo,

ich möchte gerne in einer DCBrowse den rechten Mausklick auf eine Zelle abfragen.
D.h. klick man auf eine Zelle mit der rechten Maustaste, dann möchte ich eine Funktion mit dem Inhalt der Zelle als Parameter aufrufen.

Ich habe folgendes (für den Anfang) probiert, aber es funktioniert leider nicht!

Code: Alles auswählen

EVAL {|o|o:RbClick := DC_MergeBlocks(o:RbClick,{||Funktion("Test")})}
Wo liegt der Fehler?!

Danke.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von Manfred »

Hi,

wäre das eine Idee?

Code: Alles auswählen

Preeval {|| oBrowse:ItemRbDown usw}
Ich klicke auch die rechte Maustaste und es klappt bei mir.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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 bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von Tom »

Hallo, Frank.

Dieses Beispiel zeigt bei einem Klick mit der rechten Maustaste in die erste Spalte den Inhalt der Zelle in einer Messagebox an:

Code: Alles auswählen

#include "dcdialog.ch"
#include "appevent.ch"

#pragma library("dclipx.lib")

PROCEDURE appsys() ; RETURN

PROCEDURE main()
LOCAL getlist    := {}
LOCAL GetOptions
LOCAL oBrowse, aDir := Directory()

@ 1,1 dcbrowse oBrowse data adir size 100,20
dcbrowsecol element 1 header "1" parent oBrowse width 10 ;
            eval {|o|o:DataArea:RbClick := {||MsgBox(DC_GetColArray(oBrowse:ColPos,oBrowse))}}
dcbrowsecol element 3 header "2" parent oBrowse width 10 
dcbrowsecol element 4 header "3" parent oBrowse width 10 
dcbrowsecol element 5 header "4" parent oBrowse width 10 


DCREAD GUI FIT ADDBUTTONS

RETURN
Herzlich,
Tom
FrankL
Rookie
Rookie
Beiträge: 7
Registriert: Fr, 04. Sep 2009 8:38

Re: DCBROWSE bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von FrankL »

Hallo,

danke für die schnelle Hilfe. Das ganze funktioniert schon ganz gut. Solang ich ein Array browse.
Geht das auch mit einer Datenbankdatei?

Gruß,
Frank
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 bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von Tom »

Hallo, Frank.
Das ganze funktioniert schon ganz gut.
Eigentlich nicht. Wenn Du mit dem Beispiel rumspielst, wirst Du feststellen, dass Dir der Rechtsklick immer den Inhalt der aktiven Zelle anzeigt, auch, wenn Du in eine andere Zeile klickst. 8)

Um diesen Effekt zu vermeiden, gibt es einen einfachen und einen komplizierten Weg. Für den komplizierten müsste ich erst den Code zusammenkramen; der einfache heißt "RBSELECT" und ist eine Option von DCBROWSE (also @ n,n DCBROWSE ... RBSELECT). Das bewirkt, dass ein Klick mit der rechten Maustaste auch immer den Fokus auf die Zelle setzt.

Und dann steht die Datenquelle - bei einer zu browsenden Tabelle - auch auf dem richtigen Datensatz. Du kannst also einfach mit MsgBox(MeineTabelle->FeldDieserSpalte) anzeigen lassen, was in der Zelle steht.

Wie gesagt, das ist der einfache Weg. Wenn Du den komplizierten benötigst, sag Bescheid.
Herzlich,
Tom
FrankL
Rookie
Rookie
Beiträge: 7
Registriert: Fr, 04. Sep 2009 8:38

Re: DCBROWSE bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von FrankL »

Hallo,

Danke für die Hilfe. Das mit dem RBSELECT hätte ich sowieso gebraucht. Man soll ja sehn wo man ist.
Das mit dem Feldnamen hatte ich zuerst, dass hat bei mir aber nicth funktioniert, da die DCBROWSE nicht immer die gleiche Datei öffnet. D.h. die Feldnamen waren Variabel und in einem Array gespeichert. Die DCBROWSECOL kamen dann durch ein FOR ... NEXT zustande. Leider hat er die Zählervariable aber erst beim Klick auf eine Zelle augweretet und so war ich mit meinem Zähler immer bei len(aArray)+1, was natürlich zu einem Fehler fürht. Es gibt aber einen einfachen Trick. Einamal muss das RBSELECT in DCBROWSE und man im DCBROWSECOL verwendet man:

Code: Alles auswählen

EVAL {|o|o:DataArea:RbClick := {||Funktion(o:getData())}} ;
Funktioniert genau wie es soll.

Gruß,
Frank
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: DCBROWSE bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von Martin Altmann »

Hallo Frank,
Dein Problem mit dem "falschen" Zähler ist das typische "detached local" Problem.
Such mal nach diesen zwei Wörtern hier im Forum - da findest Du einige Umgehungsmöglichkeiten dafür.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von Manfred »

Was ist oder war denn an meinem Vorschlag so daneben? Ich benutze es so und es klappt auch. Würde mich jetzt mal so ganz nebenbei interessieren. Ich lerne ja gerne dazu. :D
Zuletzt geändert von Manfred am Do, 04. Feb 2010 8:54, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
FrankL
Rookie
Rookie
Beiträge: 7
Registriert: Fr, 04. Sep 2009 8:38

Re: DCBROWSE bzw. DCBROWSECOL klick rechte Maustaste

Beitrag von FrankL »

Hallo,

@Manfred: Ganz ehrlich gesagt, habe ich von unten nach oben gearbeitet. Und der erste Code hat dann schon fast so funktioniert wie gewünscht.
Danke jedenfalls an Alle!

@Martin: Das werde ich mal machen. Danke für den Hinweis.

Gruß,
Frank
Antworten