express++ DCSAY neuen Wert zu weisen

Moderator: Moderatoren

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

express++ DCSAY neuen Wert zu weisen

Beitrag von Alfred »

Hallo,

Code: Alles auswählen

@ 10,10 DCSAY 'Test' ;
            SAYOBJECT oDCSAY1

oDCSAY1:Setcaption('Hallo')
DC_GetRefresh(GetList)

liefert unbekannte Variable oDCSAY1. :?

Gruß
Alfred
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Alfred,

DCSAY {|| cVariable }

für was benötigst Du das SayObject ?

cVariable enthält den anzuzeigenden Text.
Allerdings besteht in build 245 das Problem das der alte Text nicht richtig
gelöscht wird.
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Koverhage,

zum Debuggen oder den Programmfortschritt zu sehen(Ein Programm mit
Excelzugriff ist z.B. extrem langsam und die Progressbar zu ungenau).
Für for i = 1 to 500 ist MsgBox() ungeeignet.

Gruß
Alfred
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Code: Alles auswählen

Dialog:
cVar := 'Test'
@ 10,10 DCSAY {||cVar}

Irgendwo anders:
FUNCTION MyFunc(cVar,aGetList) // aGetList ist die GetList aus dem Dialog
cVar := 'Hallo'
DC_GetRefresh(aGetList) 

RETURN nil
Wenn DCSAY einen Codeblock enthält, führt DC_GetRefresh() dazu, daß die Caption des Statics refresht wird. Es ist kein SetCaption() nötig.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Ergänzung: Wenn Du DCSAY ohne GET verwendest, gibt es GETOBJECT oder SAYOBJECT nicht, nur OBJECT:

Code: Alles auswählen

@ 1,1 DCSAY 'Test' OBJECT oSay
Edit: Das gilt auch umgekehrt für DCGET:

Code: Alles auswählen

@ 1,1 DCGET nTest OBJECT oGet
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 Programm ruft MyFunc auf(mit einer Msgbox getestet). Eine Msgbox
in der Action bringt für cVar jedoch Test. Wenn ich cVar := "Huhu" in der
Action ändere, zeigt dies ebenfalls keine Wirkung. :(

Code: Alles auswählen

#include "dcdialog.ch"
PROCEDURE main()
  LOCAL aGetList := {}, GetOptions, cVar  
  SET DATE GERMAN
  SET CHARSET TO ANSI
  cVar := "Test"   
  @ 10,10 DCSAY {||cVar}             
  @ 17.5,60 DCPUSHBUTTON ;
      CAPTION {||"ändern"} ;
      SIZE 10,1.5 ;
      Action{||MyFunc(cVar,aGetList)}    
  @ 17.5,80 DCPUSHBUTTON ;
      CAPTION {||"beenden"} ;
      SIZE 10,1.5 ;
      Action{||DC_ReadGuiEvent(DCGUI_EXIT_OK,aGetList)}      
  DCGETOPTIONS ;
      SAYLEFT ;
      WINDOWHEIGHT 450 ;
      WINDOWWIDTH 750
  DCREAD GUI ;  
     TITLE 'Test dcsay' ; 
     OPTIONS GetOptions 
RETURN
Procedure APPSYS()
RETURN
FUNCTION MyFunc(cVar,aGetlist)
cVar := 'Hallo'
DC_GetRefresh(aGetList)
RETURN nil 
Deine Hinweise in der Ergänzung findet man die in der Doc?

Gruß
Alfred
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Code: Alles auswählen

MyFunc([color=red]@[/color]cVar,aGetList)
Sonst ist die Änderung der Variablen in MyFunc wirkungslos (Call by reference).

Nee, ich glaube, die Einzelfälle (bei DCSAY ohne GET gibt es auch GETCOLOR, SAYCOLOR, GETSIZE usw. nicht, analog bei DCGET) hat Roger so nicht ausdokumentiert. Richtlinie: Wenn man nur eins von beiden nutzt, ist keine Nennung "GET" oder "SAY" bei den Optionen nötig.
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,

nunmehr steht in der msgbox(cVar) "Hallo".

Der DCSAY ändert sich leider immer noch nicht. :oops:

Wie kann man sich den anzeigen lassen was in der aGetList enthalten ist?

Gruß
Alfred
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Alfred.

In den Action-Codeblöcken darf nicht "aGetList" stehen, da muß "GetList" ohne "a" hin. Du kannst das, weil es ohnehin eine Variable ist, gänzlich auf GetList ändern. Dann funzt es auch.
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,

vielen Dank für deine Mühe. Nun funktioniert der DCSAY. :)

Gruß
Alfred
Antworten