überlagernde Fenster [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:

überlagernde Fenster [erledigt]

Beitrag von Ewald »

Dieses Programm (Fenster.exe) kann sich immer wieder selbst aufrufen. Leider legen sich die neu erzeugten Fenster immer übereinander. Das ist in der Praxis natürlich sehr unübersichtlich. Kann mir da wohl jemand sagen, wo ich den Hebel ansetzen muss, wenn ich neue Fenster in diesem Beispiel immer einen Tick versetzen will ? Es gibt da in den getoptions den Parameter ORIGIN, mit dem in das neue Fenster an die Mauskoordinaten setzen könnte. So was ähnliches stelle ich mir vor. Es könnte auch ein Wert aus einer Tabelle sein, den ich bei jedem Aufruf hochzähle und irgendwo im Programm verwende. Ich habe nur nicht die geringste Ahnung wie und wo.
#include 'dcdialog.ch'
proc main
local getlist:={}
@ 1,1 dcsay "Das ist das neue Fenster"
@ 2,1 dcsay "das sich nicht überlagern soll"

@ 4,01 dcpushbutton caption "Ende " size 10,1 ;
action {||dc_readguievent(DCGUI_EXIT_OK,Getlist)}
@ 4,12 dcpushbutton caption "neues Fenster" size 10,1 ;
action {||runshell("","fenster.exe",.t.)}
dcread gui fit
return

proc appsys
return
Zuletzt geändert von Ewald am Sa, 18. Jul 2009 17:08, insgesamt 1-mal geändert.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: überlagernde Fenster

Beitrag von Wolfgang Ciriack »

Hallo Ewald,
ich würde die Fensterposition mit DCGET OPTIONS WINDOWROW und WINDOWCOL festlegen und dann dem nächsten Aufruf als Parameter mitgeben.
Z.B. x und y als Position RunShell(alltrim(str(x,3,0))+" "+alltrim(str(y,3,0)),"Fenster.exe",....)

Über PCount() die Parameter ermitteln, und falls übergeben (beim ersten mal nicht) dann dementsprechend wieder über DCGET OPTIONS setzen. Das was du damit nicht abfängst, ist der Aufruf ein zweites Mal über Windowssymbol. Andere Möglichkeit wäre als Parameter ein Zähler, der dann einfach die Position um zähler mal Pixel versetzt.
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: überlagernde Fenster

Beitrag von Ewald »

Hallo Wolfgang,
danke für den Tip. Das habe ich gesucht.
Wie sagt man so schön ? Wer lesen (und verstehen) kann ist klar im Vorteil. Die Getoptions habe ich sicherlich 20 mal in dieser Sache durchgeackert und die beiden Parameter überhaupt nicht in Zusammenhang mit meinem Problem gebracht. Das Alter ...
Gruß
Ewald
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: überlagernde Fenster [erledigt]

Beitrag von Ewald »

So geht's

Code: Alles auswählen

#include 'dcdialog.ch'

proc main
local getlist:={}
parameter xwert
if !pcount() = 0
   vwert=val(xwert)
    else
   vwert=300
endif

dcgetoption;
windowrow vwert ;
windowcol vwert  

@ 1,1 dcsay "Das ist das neue Fenster"
@ 2,1 dcsay "das sich nicht überlagern soll"

@ 4,01 dcpushbutton caption "Ende "         size 10,1 ;
       action {||dc_readguievent(DCGUI_EXIT_OK,Getlist)}
@ 4,12 dcpushbutton caption "neues Fenster" size 10,1 ;
       action {||runshell(str(vwert+10),"fenster.exe",.t.)}

dcread gui fit ;
options getoptions

return

proc appsys
return
Antworten