Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 242855 (4291)
  Suchen
 Zurück zur Übersicht
 AutorThema: Verschiebbares Dialogfenster
Wilfried
Datum:09.07.02 21:24 Antwortenals Email verschicken (w.heyse@wobline.de) 


Leider habe ich noch nicht so viel Ahnung, davon aber eine ganze Menge. Ich möchte ein Dialogfenster ohne Hauptfenster öffnen. Dieses ist mir auch gelungen. Dieses Dialogfenster möchte ich jedoch frei verschieben können. Und dann soll es auch da bleiben!! Da aber bei create Dialog die Koordinaten fest vorgegeben sind, funktioniert es natürlich nicht. Ich habe keine Ahnung, wie man das bewerkstelligen könnte. Vielleicht kann mir jemand helfen. Vielen Dank vorab und wenns klappt natürlich auch noch danach.
PS Ich benutze Profan 4.5

Folgendes Listing:

Declare Ende%

'Erkennen des Befehls
PROC Erkennen
'hier wird später die Eingabe ausgewertet
ENDPROC

PROC Fenster1
Declare hD%, ENTER%, hN%, OK%, \
Befehl$
Let hD% = @CreateDialog(%HWnd,"Fenster1",20,40,300,70)
@CreateText(hD%,"Eingabe", 10,13,60,20)
Let hN% = @CreateEdit(hD%,"",65,10,200,24)
'Dialog-Schleife
@SetFocus(hN%)
Let OK% = 0
WhileNot Ok%
WaitInput
If @Equ(%Key,2) 'Schließen bzw. Alt F4
Let Ok% = 1
END

ElseIf @GetFocus(ENTER%) 'Enter gedrückt
Let Ok% = 1
Let Befehl$ = @GetText$(hN%)

' *****************Aufruf des Erkennen Programms
Erkennen
EndIf
Wend
@DestroyWindow(hD%)
ENDPROC

'Haupt-Programm

Let Ende% = 0
WhileNot Ende%
Fenster1
Wend
End


Wilfried Heyse
Datum:09.07.02 21:31 Antwortenals Email verschicken (w.heyse@wobline.de) 


tschuldigung, auch ich habe leider nicht den vollen Namen angegeben. hier ist er: Wilfried Heyse


Rolf Koch
Datum:09.07.02 22:42 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hi, ne Lösung wäre so:
Declare Ende%,left%,top% 
Declare rect#,x%,y%
declare x$,y$
Def GetWindowRect(2) !"USER32","GetWindowRect"
let x$=@ReadIni$("C:\Koord.ini","Position","X")
let y$=@ReadIni$("C:\Koord.ini","Position","Y")

If equ$(x$,"")
   let x%=20
   let y%=40
Else
   let x%=val(x$)
   let y%=val(y$)
endif

'Erkennen des Befehls
PROC Erkennen
'hier wird später die Eingabe ausgewertet
ENDPROC

PROC Fenster1
Declare hD%, ENTER%, hN%, OK%, \
Befehl$
Let hD% = @CreateDialog(%HWnd,"Fenster1",x%,Y%,300,70)
@CreateText(hD%,"Eingabe", 10,13,60,20)
Let hN% = @CreateEdit(hD%,"",65,10,200,24)
'Dialog-Schleife
@SetFocus(hN%)
Let OK% = 0
WhileNot Ok%
WaitInput
If @Equ(%Key,2) 'Schließen bzw. Alt F4
'hier Position merken
  Dim rect#,16
  GetWindowRect(hd%,rect#)
  left%=Long(rect#,0)
  top%=Long(rect#,4)
  Dispose rect#
  'Normal ini in deinem Pfad speichern
  WriteIni "C:\Koord.ini","Position","X"=str$(Left%) 
  WriteIni "C:\Koord.ini","Position","Y"=str$(Top%)
Let Ok% = 1
END

'Wi ist den der Button ;) ?
ElseIf @GetFocus(ENTER%) 'Enter gedrückt
Let Ok% = 1
Let Befehl$ = @GetText$(hN%)

' *****************Aufruf des Erkennen Programms
Erkennen
EndIf
Wend
@DestroyWindow(hD%)
ENDPROC

'Haupt-Programm

Let Ende% = 0
Fenster1
WhileNot Ende%
'Hier darf das Fenster1 aber nicht hin, sonst wird es 
'dauernd wieder aufgerufen.
Wend
End

Hoffentlich hilft es
Rolf


Wilfried Heyse
Datum: 10.07.02 23:41 Antwortenals Email verschicken (w.heyse@wobline.de) 


Der Tip mit der Ini ist ein guter Hinweis. Danke! Leider funktioniert es doch nicht, da aus unerfindlichen Gründen die Ini nicht, bzw. nur manchmal geschrieben wird. Wahrscheinlich liegt es irgendwo am Cache oder so.Wenn ich mir die Werte mit print anzeigen lasse, erscheint die korrekte Fensterposition. Das das Fenster immer wieder erscheint ist gewollt. Das Fenster übergibt später ein Kommando, welches wiederum eine Aktion auslöst und erscheint sofort wieder. Die Frage wo der Button ist, ist schon berechtigt. Da war mal einer. Hab ich vergessen zu löschen. Trotzem DANKE muß erst noch klären, warum die Datei nicht korrekt geschrieben wird.


 Zurück zur Übersicht