1

Konu: "Form.Setfocus" hk.

Yazdığım projemin   _Screen.Visible ayarı  .F. durumda.

Yeni bir forumu diğer bir form içerisinden çağırdığımda Bir önceki formu HIDE özelliği ile gizliyorum.

Sorunum ise şu; bu işlemi yaptıktan sonra forum penceresinin herhangi bir yerine tıklamadan formu klavye ile kontrol edemiyorum. Sanki kontrol, o HIDE olan bir önceki formdaymış gibi görünüyor.

Ne yapmalıyım ki, TABINDEX i 1 olan nesneye konumlanabilmeliyim?

Yardım ve yorumlar için şimdiden çok teşekkürler.

Not: ShowWindow property si (2), As top level form.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

2

Re: "Form.Setfocus" hk.

hide den sonra tekrar show yapmayı dene öbür formu.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

3

Re: "Form.Setfocus" hk.

bence yeni form da thisform.refresh yok.

Bilmediğin Neyse Yanıldığındır.

4 Son düzenleyen, ugurlu2001 (19.02.2010 16:06:03)

Re: "Form.Setfocus" hk.

Arkadaşlar yorumlar için çok teşekkürler ama ikiside değil sad

İstemediğim durumu şöyle açıkliyim:

Başlat\Çalıştır\CALC [ENTER]  && şimdi hesap makinası açıldı.

Ve masaüstünde boş bir yere tıklayın. Hesapmakinası artık aktif değil. Kontrol Windows desktop ta.

Birbiriyle ilişkili her yeni formu açtığımda bu durum devam ediyor.

Bendeki durumda bunun aynısı

Çok sıkıcı bir durum ama Formları kapattığım da bir sorun yok. Focus bir önceki forma geliyor. Olması gerektiği gibi. Sorun açıl yeni formlarda

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5

Re: "Form.Setfocus" hk.

Uğur sorun bir formdan diğer forma döndüğünde tabindex in istedigin yerde olmamasimi ?

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

6 Son düzenleyen, ugurlu2001 (19.02.2010 16:41:10)

Re: "Form.Setfocus" hk.

Tekrardan merhabalar.

Sorun böyle...

Anlatmaktan daha kolay oldu smile

Visual Fox Pro
_Screen.Visible = .F. 

 
PUBLIC  oForm
 
oForm = CreateObject('MyForm')
oForm.AddObject('cmdButton1','btnMyButton')
oForm.Show
READ EVENTS
 
DEFINE CLASS MyForm As Form
    ShowWindow = 2
ENDDEFINE
 
DEFINE CLASS btnMyButton As CommandButton     
    Visible = .T.
    Enabled = .T.
    Top = 1
    Left = 1
    Height = 50
    Width = 150
 
    PROCEDURE Click
        _Screen.Visible = .T.
        ThisForm.Release
    ENDPROC
ENDDEFINE
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

7

Re: "Form.Setfocus" hk.

ben bir sey farkedemedim sad

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

8

Re: "Form.Setfocus" hk.

Abi farkedemedim derken; bahsettiğim sorun den yok mu?

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

9

Re: "Form.Setfocus" hk.

form aciliyor ve kapaniyor ve cursor nerde kaldi ise oraya dönüyor ,
konu 2 form acip ondan ona gectikten sonra vs oluyorsa kodu 2 forma gore degistir oyle test edelim

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

10

Re: "Form.Setfocus" hk.

Soykan abi, 1 yada bir kaç form olması arasında bir fark yok

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

11

Re: "Form.Setfocus" hk.

Şöyle bir şey önereyim belki işine yarar

form#init e

Visual Fox Pro
this.addproperty('cLastControl','')


ekle

formdaki kullandigin controllerin (textbox vs ) lostfocusuna

Visual Fox Pro
thisform.cLastControl=this


yaz

form#activate e

Visual Fox Pro
If Type("thisform.cLastControl")="O"

    Thisform.cLastControl.SetFocus()
Else
    BaskaBirControl.SetFocus()
Endif

bu sunu sagliyor formdan ayrilirken hangi control de isen forma geri dondugunde yine oraya focus oluyorsun
ben bunu tum formlarimda ve textbox vs classlarimda kullaniyorum en azindan ayrildigimda tekrar ayni yere donebiliyorum.

umarim fikir verir yada isine yarar...

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

12

Re: "Form.Setfocus" hk.

Visual Fox Pro
local lnHwnd

lnHwnd = this.Hwnd
If m.lnHwnd <> 0 AND !IsWindowMinimized(m.lnHwnd) && if minimized do not set focus to
    BringAppInFront(m.lnHwnd)
Endif
 
*Procedure BringAppInFront(tnHWND)
*BringAppInFront.prg
lparameters tnHWND
    Declare Integer GetForegroundWindow In win32API
    Declare Integer GetCurrentThreadId In win32API
    Declare Integer GetWindowThreadProcessId In win32API ;
        integer HWnd, Integer @lpdwProcessId
    Declare short SetForegroundWindow In win32API Integer lnHWnd
    Declare short AttachThreadInput In win32API ;
        integer idAttach, Integer idAttachTo,  short fAttach
 
    Declare Integer SetActiveWindow In WIN32API Integer HWnd   && handle to window
 
    Local lpdwProcessId, lnThreadID1, lnThreadID2
    lpdwProcessId = 0
    lnThreadID1 = GetCurrentThreadId()
 
    lnThreadID2 = GetWindowThreadProcessId( m.tnHWND, @lpdwProcessId)
 
    AttachThreadInput(lnThreadID1, lnThreadID2, 1)
    SetForegroundWindow(m.tnHWND)
    SetActiveWindow(m.tnHWND)
    AttachThreadInput(lnThreadID1, lnThreadID2, 0)
*Endproc

13

Re: "Form.Setfocus" hk.

Üstat,

Yine elin değdi..

Hakkın ödenmez...

Ellerine sağlık. Çok teşekkür ediyorum.  smile

Aşağıdaki şekilde kullandım :

Visual Fox Pro
local lnHwnd

lnHwnd = this.Hwnd
If m.lnHwnd <> 0 && AND !IsWindowMinimized(m.lnHwnd) && if minimized do not set focus to
    BringAppInFront(m.lnHwnd)
Endif

IsWindowMinimized method una yada yada procedure ünü kullanmadım. Sorun olmaz umarım?

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

14

Re: "Form.Setfocus" hk.

Üstat, şıkır şıkır çalışıyor smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

15

Re: "Form.Setfocus" hk.

Sana IsWindowMinimized() kismi lazim degil (fonksiyonu ucururken oradan kaldirmayi unutmusum). Hani olur da lazim olursa:

Visual Fox Pro
PROCEDURE IsWindowMinimized(tnHWND)

LOCAL lpwndpl
Declare short GetWindowPlacement In WIN32API ;
    integer HWnd, ;
    string @ lpwndpl
 
#define SW_SHOWMINIMIZED    2
#define SW_SHOWMAXIMIZED    3
#define SW_MAXIMIZE         3
#define SW_SHOWNOACTIVATE   4
#define SW_SHOW             5
#define SW_MINIMIZE         6
#define SW_SHOWMINNOACTIVE  7
#define SW_SHOWNA           8
#define SW_RESTORE          9
#define SW_SHOWDEFAULT      10
#define SW_FORCEMINIMIZE    11
 
lpwndpl = CHR(4*3+8*2+4*4)+replicate(CHR(0),4*3+8*2+4*4-1)
 
return ( GetWindowPlacement(m.tnHWND, @lpwndpl) # 0 ) AND ;
        INLIST(ASC(SUBSTR(m.lpwndpl, 4+4+1, 1)), ;
        SW_SHOWMINIMIZED, SW_MINIMIZE, SW_SHOWMINNOACTIVE, SW_FORCEMINIMIZE )

16

Re: "Form.Setfocus" hk.

Üstat, IsWindowMinimized kısmını kullanmamıştım zaten smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü