Dialoge in Mausnähe öffnen |
Auszug aus 2.1.3 Dialoge in Mausnähe öffnenAutor: Christian RatschSie können mit der folgenden Routine Dialoge so öffnen, dass sich der Mauszeiger, falls dies möglich ist, genau in der Mitte des Dialoges befindet. Um Ihr evtl. schon fertiges Programm an diese Routine anzupassen, gehen Sie wie folgt vor: 1. In ihrer RSC-Datei sollte sich ein Voreinstellungen-Dialog befinden, in dem eine Radiobutton-Gruppe platziert ist, mit der man die Position bestimmen kann. Etwa so:
2. Sie müssen auch die Procedure @rsc_set_pos() (in der faceVALUE Extra-Routines-Listbox 'Dialogposition') mit in das Programm einbinden (siehe Wohin mit den Dialogen?). 3. Ersetzen Sie alle handle&=@win_open_dialog(type&,tree&,icfyicon&) durch handle&=@dial_to_mouse(type&,tree&,icfyicon&,PRED(dialpos_var&)), auch in der Fenster-Alert-Routine, den Progress-Routinen und in @handle_keypress() an der Stelle, an der der Dialog fvt_asci& geöffnet wird (ziemlich weit am Ende der Prozedur).
' REM FVAL_TITLE: Dialog to mousepos FUNCTION dial_to_mouse(type&,tree&,icon&,to_mouse&) !call LOCAL tree%,x&,y&,w&,h&,x2&,y2&,w2&,h2&,midx&,midy&,titlebar&,menubar& LOCAL difx&,dify&,sumx&,sumy&,mx&,my&,dummy& ' ' 10.08.1996 Christian Ratsch V1.2 ' ' may only be used with dialogs (not userwindows) ' needs @rsc_set_pos() from Holger Herzog ' IF @find_handle_from_tree(tree&)=-1 !window not yet open? IF to_mouse&=1 tree%=@xrsrc_gaddr(0,tree&) ' w&=OB_W(tree%,0) h&=OB_H(tree%,0) x&=OB_X(tree%,0) y&=OB_Y(tree%,0) midx&=w&/2 midy&=h&/2 ~GRAF_MKSTATE(mx&,my&,dummy&,dummy&) difx&=mx&-midx& sumx&=mx&+midx& dify&=my&-midy& sumy&=my&+midy& ~WIND_CALC(0,&X1001,x&,y&,w&,h&,x2&,y2&,w2&,h2&) titlebar&=h2&-h& ~WIND_GET(0,4,dummy&,menubar&,dummy&,dummy&) menubar&=PRED(menubar&) ' IF difx&<1 difx&=1 ENDIF IF dify&<menubar&+titlebar& dify&=menubar&+titlebar& ENDIF IF sumx&>WORK_OUT(0) difx&=WORK_OUT(0)-w& ENDIF IF sumy&>WORK_OUT(1) dify&=WORK_OUT(1)-h& ENDIF @rsc_set_pos(tree&,difx&,dify&) ELSE IF to_mouse&=2 @rsc_set_pos(tree&,0,0) ENDIF ENDIF RETURN @win_open_dialog(type&,tree&,icon&) ENDFUNC Legen Sie die Routine einfach in Ihrem DATA\USER\- Verzeichnis ab, damit sie Ihnen immer als EXTRA-Routine zur Verfügung steht. |