DCGET mit Combobox die zweite [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:

DCGET mit Combobox die zweite [erledigt]

Beitrag von Ewald »

Ich schiebe da noch ein kleines Problem mit den Comboboxen. Dazu habe ich mal 2 Comboboxen aus dem Programm geschnitten. Siehe Code.
Wenn ich in den Eingabefeldern eine Eingabe mache, poppt sofort die Combobox auf und zeigt mir den Inhalt des hinterlegten Array an. Stimme die Eingabe mit einer Pos. des Array überein, ist das Element das erste in der Box. Das wird ja wohl durch den Parameter KEYDROP gesteuert. So habe ich mir das auch vorgestellt.
Das Problem: Irgendwann ist mir aufgefallen, das das nicht mehr funktioniert, wenn das Eingabefeld mehr als einmal im Programmverlauf angesprochen wird. Es funktioniert bei mir also nur dann, wenn das kpl. Programm neu gestartet wird. Wenn ich z.B. im Betrieb zwischen diesen beiden Eingabefeldern hin und her springe, poppt die Box nach der ersten Eingabe nicht mehr auf. Egal ob das Eingabefeld leer ist oder nicht. Ich kann die Box noch problemlos abrollen und sie ist auch noch mit dem Array gefüllt, aber - KEYDROP geht nur beim Programmstart. Die Picture Parameter habe ich schon mal entfernt, hat aber auch nichts genutzt.
Ist das wohl ein Bug oder macht das irgendwie einen Sinn den ich nicht erkenne ?
Gruß
Ewald

Code: Alles auswählen

@ 2.5,01 dcsay "Fach"     saysize 0
@ 2.5,21 dcsay {||xfach} object oxfach saysize 50
@ 2.5,10   DCGET akopf[_KFACH] picture "@!@K" getsize 6,1.1 ;
           TABSTOP    ;
           COMBO      ;
           HEIGHT 7   ;         
           WIDTH 70   ;         
           DATA afach ;
           ELEMENT 3  ;
           RETURN {|n|xfach:=afach[n,2],dc_getrefresh(oxfach),afach[n,1]} ; 
           KEYDROP    ;
           when  {||!lsperr}
             
@ 2.5,65 dcsay "Aktentyp"     saysize 0
@ 2.5,85 dcsay {||xakte} object oxakte saysize 40
@ 2.5,75   DCGET akopf[_KTYP] picture "@!@K" getsize 6,1.1 ;
           TABSTOP    ;
           COMBO      ;
           HEIGHT 7   ;         
           WIDTH 70   ;         
           DATA aakte ;
           ELEMENT 3  ;
           RETURN {|n|xakte:=aakte[n,2],dc_getrefresh(oxakte),aakte[n,1]} ;
           KEYDROP    ;
           when  {||!lsperr}
Zuletzt geändert von Ewald am Mi, 07. Okt 2015 17:30, insgesamt 1-mal geändert.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCGET mit Combobox die zweite

Beitrag von Ewald »

Moin, ich habe den Codeschnipsel mal lauffähig gemacht. Das Programm ergibt zwar keine Sinn, wäre aber nett, wenn das mal jemand compilieren könnte. Das zeigt genau mein Problem. Wenn das Programm gestartet wird funktioniert das Aufpoppen der Boxen, danach nie wieder.

Code: Alles auswählen

#include "dcdialog.ch"
#define _KFACH  1
#define _KTYP   2

proc main       
local getlist:={},akopf:=array(0),afach:={},aakte:={}
local xfach:=" ",xakte:=" ",lsperr:=.f.

aadd(akopf,space(4))
aadd(akopf,space(1))

aadd(afach,{"HNAB","HALSNASEN"})
aadd(afach,{"ABCD","ARM BEIN "})

aadd(aakte,{"A","AKTEN"})
aadd(aakte,{"O","ORDNER"})

@ 3,01 dcsay "Entweder ein H oder ein A eingeben "

@ 5.5,01 dcsay "Fach"     saysize 0
@ 5.5,21 dcsay {||xfach} object oxfach saysize 50
@ 5.5,10   DCGET akopf[_KFACH] picture "@!@K" getsize 6,1.1 ;
           TABSTOP    ;
           COMBO      ;
           HEIGHT 7   ;         
           WIDTH 70   ;         
           DATA afach ;
           ELEMENT 2  ;
           RETURN {|n|xfach:=afach[n,2],dc_getrefresh(oxfach),afach[n,1]} ; 
           KEYDROP    ;
           when  {||!lsperr}

@ 3,65   dcsay "entweder ein A oder ein O eingeben"
             
@ 5.5,65 dcsay "Aktentyp"     saysize 0
@ 5.5,85 dcsay {||xakte} object oxakte saysize 40
@ 5.5,75   DCGET akopf[_KTYP] picture "@!@K" getsize 6,1.1 ;
           TABSTOP    ;
           COMBO      ;
           HEIGHT 7   ;         
           WIDTH 70   ;         
           DATA aakte ;
           ELEMENT 2  ;
           RETURN {|n|xakte:=aakte[n,2],dc_getrefresh(oxakte),aakte[n,1]} ;
           KEYDROP    ;
           when  {||!lsperr}

@ 25,1 dcpushbutton caption "Ende " size 10,1 ;
       action {||dc_readguievent(DCGUI_EXIT_OK,Getlist)}

dcread gui fit ;
title " "

return

proc appsys
return
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: DCGET mit Combobox die zweite

Beitrag von Wolfgang Ciriack »

Kann ich bestätigen, habe auf die Schnelle aber keine Lösung gefunden.
Vielleicht setzt du es mal bei Roger ins Forum.
Viele Grüße
Wolfgang
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: DCGET mit Combobox die zweite

Beitrag von Tom »

Hallo, Ewald.

Es wird die Funktion _GetComboKeyboard() aufgerufen. Diese setzt nach der ersten Verwendung eine iVar "comboFlag" auf .T. - und wenn das der Fall ist, arbeitet sie nicht mehr (.AND. !oGet:comboFlag). Du kannst Deinen Code dadurch korrigieren, dass Du bei jedem DCGET das hier einfügst:

Code: Alles auswählen

GOTFOCUS {|a,b,o|o:ComboFlag := .F.} ;
Dann resettet die Flag und das KeyDrop geht wieder.

Ich lege auch gleich mal einen Thread im eXpress++-Forum an.

Ach so: Das funktioniert leider nicht, wenn das Getfeld geleert wird. Dafür wäre dann noch etwas mehr Workarounding nötig. :wink:
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: DCGET mit Combobox die zweite

Beitrag von Ewald »

Hallo Tom,
bin etwas verwirrt weil ich keine mail bekomme habe das es eine Reaktion von dir gab.
Also, dein Tipp funktioniert (natürlich). Es geht auch mit @K, also wenn das Getfeld geleert wird.
Dieser Code läuft wie gewünscht.
Danke dafür
Ewald

Code: Alles auswählen

#include "dcdialog.ch"
#define _KFACH  1
#define _KTYP   2

proc main       
local getlist:={},akopf:=array(0),afach:={},aakte:={}
local xfach:=" ",xakte:=" ",lsperr:=.f.

aadd(akopf,space(4))
aadd(akopf,space(1))

aadd(afach,{"HNAB","HALSNASEN"})
aadd(afach,{"ABCD","ARM BEIN "})

aadd(aakte,{"A","AKTEN"})
aadd(aakte,{"O","ORDNER"})

@ 3,01 dcsay "Entweder ein H oder ein A eingeben "

@ 5.5,01 dcsay "Fach"     saysize 0
@ 5.5,21 dcsay {||xfach} object oxfach saysize 50
@ 5.5,10   DCGET akopf[_KFACH] picture "@!@K" getsize 6,1.1 ;
           GOTFOCUS {|a,b,o|o:ComboFlag := .F.} ;
           TABSTOP    ;
           COMBO      ;
           HEIGHT 7   ;         
           WIDTH 70   ;         
           DATA afach ;
           ELEMENT 2  ;
           RETURN {|n|xfach:=afach[n,2],dc_getrefresh(oxfach),afach[n,1]} ; 
           KEYDROP    ; 
           when  {||!lsperr}

@ 3,65   dcsay "entweder ein A oder ein O eingeben"
             
@ 5.5,65 dcsay "Aktentyp"     saysize 0
@ 5.5,85 dcsay {||xakte} object oxakte saysize 40
@ 5.5,75   DCGET akopf[_KTYP] picture "@!@K" getsize 6,1.1 ;
           GOTFOCUS {|a,b,o|o:ComboFlag := .F.} ;
           TABSTOP    ;
           COMBO      ;
           HEIGHT 7   ;         
           WIDTH 70   ;         
           DATA aakte ;
           ELEMENT 2  ;
           RETURN {|n|xakte:=aakte[n,2],dc_getrefresh(oxakte),aakte[n,1]} ;
           KEYDROP    ;
           when  {||!lsperr}

@ 25,1 dcpushbutton caption "Ende " size 10,1 ;
       action {||dc_readguievent(DCGUI_EXIT_OK,Getlist)}

dcread gui fit ;
title " "

return

proc appsys
return
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: DCGET mit Combobox die zweite [erledigt]

Beitrag von Tom »

Hallo, Ewald.

Freut mich!

Ich habe auch in Rogers Forum einen Thread angelegt, um auf das Problem hinzuweisen:

http://bb.donnay-software.com/donnay/vi ... f=9&t=1646
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: DCGET mit Combobox die zweite [erledigt]

Beitrag von Ewald »

Hallo Tom,
wie gesagt, das hier kann ich so nicht feststellen.
"but not in the situation that it is cleared".
Gruß
Ewald
Antworten