express++ dcbrowse edit nervt

Moderator: Moderatoren

Antworten
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

express++ dcbrowse edit nervt

Beitrag von Alfred »

Hallo,

ich habe zur Erfassung von Buchungssätzen folgenden Lösungsansatz gewählt:

DCBROWSE....
DCGET.....
DCPUSHBUTTON......

Der DCGET-Teil funktioniert durch PICTURE, TABSTOP, KEYBLOCK für
meine Anforderungen optimal. Die Daten werden in Variablen gehalten
und erst wenn der gesamte Datensatz ok ist, in die Datenbank ge-
schrieben und im DCBROWSE angezeigt.

Die Korrektur der Daten erfolgt mit:

DCHOTKEY xbeK_F6 Action{||DC_BrowCellEdit(oBrowse,,,DCGUI_BROWSE_
EDITDOWN)}.

Der Cursor muß hier immer bis zum letzten Datensatz bewegt werden.
EDITACROSS muß alle Felder quer durchlaufen.
EDITEXIT +F6 pro Feld ist sehr mühsam.
Der TAB-Stop springt in den DCGET-Bereich.

Mein Ziel wäre ein browse in dem ich mich mit TAB und den Cursortasten
uneingeschränkt bewegen und die Werte einfach abändern kann.

Wie könnte man denn den DC_BrowCellEdit wieder deaktivieren?

Gruß Alfred
Juergen
UDF-Programmierer
UDF-Programmierer
Beiträge: 92
Registriert: Di, 19. Dez 2006 19:37
Wohnort: Düsseldorf
Kontaktdaten:

dcbrowse edit

Beitrag von Juergen »

Hallo Alfred,

ich programmiere schon über 5 Jahre mit Express.

Ich vermeide möglichst das direkte Editieren in einem
Browse-Objekt.

Ich öffne mit einem Doppelklick auf die Zeile ein
Fenster mit den entsprechenden Eingabefeldern.

Aber wenn es denn sein muss, nutze doch die EDITOR-Klausel
des DCBROWSECOL. (siehe Express-Hilfe DCBROWSECOL).

Gruß

Jürgen.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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:

Beitrag von Tom »

Ich mache es auch wie Jürgen. Meistens hängt an der Datenerfassung zu viel dran, um es über die Standard-Erfassungsfunktionalitäten abdecken zu können. Und wenn nacheinander Daten erfaßt werden können sollen, kann man das auch entsprechend im Bearbeitungs-/Erfassungsfenster implementieren.
Herzlich,
Tom
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Jürgen,
Hallo Tom,

danke für den Lösungsansatz.

ITEMSELECTED{|uNil1,uNil2,self| Msgbox("Hallo")}

funktioniert schon mal.

Könntet ihr mir sagen, was ich anstelle von Msgbox("Hallo") einsetzen muß,
damit ich ein Fenster für die Eingabefelder erhalte?

Gruß
Alfred
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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:

Beitrag von Tom »

Extrem vereinfacht:

Code: Alles auswählen

ITEMSELECTED{||_MyBrowseEdit(oBrowse))}


FUNCTION _MyBrowseEdit(oBrowse)

@ 1,1 DCSAY "Feld:" get db->feld

DCREAD GUI
oBrowse:RefreshCurrent()
RETURN nil
Wäre natürlich anders bei einem Arraybrowse. Oder wenn Du eine allgemeine Edit-Funktion schreiben wollen würdest. Oder wenn Du mit OK/Abbruch arbeitest. Oder. Oder. Oder. Jedenfalls: Du baust einen Dialog für die Editierung und rufst ihn im Codeblock ITEMSELECTED auf. Je nachdem, was Du an Parametern übergibst, läßt sich das weiter ausgestalten.
Herzlich,
Tom
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Tom,

habe nun ein paar graue Haare mehr(PUBLIC statt LOCAL für Getlist), aber
grundsätzlich läuft es.

Ein Problem habe ich jedoch noch:

Sobald ich das 2. Formular schließe wird nicht nur der ausgewählte Satz
geändert sondern auch der letzte Datensatz. :oops:

Kann man den beiden dcread gui einen Namen zuweisen?

Gruß
Alfred
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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:

Beitrag von Tom »

Hallo, Alfred.

Um zu wissen, wovon Du genau sprichst, müßte man Deinen Code sehen. Also mindestens die Zeilen mit DCBROWSE und einer exemplarischen DCBROWSECOL sowie die Bearbeitungsfunktion.
Herzlich,
Tom
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Tom,

das Problem ist nach der Verwendung von TABSTOP und TABGROUP
im Korrkturfenster verschwunden.
Die Sache mit den Objektnamen würde mich trotzdem noch interessieren.

Code: Alles auswählen

FUNCTION _Mybrowse(oBrowse)
Local GetList := {}, GetOptions
DCGETOPTIONS ;
    SAYLEFT;
    WINDOWHEIGTH 400;
    WINDOWWIDTH 500
DCREAD GUI ;
    MODAL ;
    OPTIONS GETOPTIONS
RETURN nil

PROCEDURE MAIN()
Local GetList :={}, GETOPTIONS
@3,13 DCBROWSE oBrowse1;
          SIZE 81,9.5 ;
          ITEMSELECTED{|uNil1,uNill2,self|_MybrowseEdit(oBrowse),;
          DC_GETREFRESH(Getlist)};
          PARENT oDialog1
DCBROWSECOL FIELD erffibu148->Betrag;
OBJECT oColBetrag;
PARENT oBrowse1

DCGETOPTIONS ;
    SAYLEFT;
    WINDOWHEIGTH 450;
    WINDOWWIDTH 750

DCREAD GUI ;
    MODAL ;
    OPTIONS GETOPTIONS ;
    PARENT @oDialog1 ;
    EVAL{|o|SetpAppWindow(o)}
RETURN
 
PROCEDURE APPSYS()
RETURN
Gruß
Alfred
Antworten