Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

SetFocus...može li to drugačije

[es] :: Visual Basic 6 :: SetFocus...može li to drugačije

[ Pregleda: 2247 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Proko
Martin Hric
St.Pazova

Član broj: 29355
Poruke: 1562
79.101.183.*

Sajt: proko.rs


+28 Profil

icon SetFocus...može li to drugačije16.10.2008. u 14:39 - pre 188 meseci
U nekoliko aplikacija imam sledeći problem:
Posle pojavljivanja Forme treba upisati nešto u TextBox, i poželjno bi bilo da TextBox bude spreman da to primi, tj da ima fokus.
Kao po pravilu, prvi put nije tako, posle startujem taj program sto puta i stalno je u redu...Naravno prvo pootvaram sve i svašta, da bude ispred. Posle nekog vremena opet nije tako, ali samo prvi put.
Koristim naredbe:
>Form1.SetFocus: Text1.SetFocus<
Pitanje je: na šta treba da obratim pažnju u kodu, postoji li neka "sigurnija" naredba za dobijanje fokusa. Koliko sam primetio, Tab redosled tada nije u redu. Kako se može kontrolisati Tab redosled, ali ne u okviru aplikacije, već u Windowsu?

 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
79.101.77.*



+1 Profil

icon Re: SetFocus...može li to drugačije16.10.2008. u 16:31 - pre 188 meseci
Probaj ovako:

Code:

Private Sub Form_Activate()
    
    PostaviFokus mojTextBox
    
End Sub

Public Sub PostaviFokus(ByRef cnt As TextBox)

    cnt.SetFocus
    cnt.SelStart = 0
    cnt.SelLength = Len(cnt.Text)
    
End Sub


offtopic:
Proko svaka cast za izume.
Pogledao sam na tvom sajtu i odusevio se.
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: SetFocus...može li to drugačije16.10.2008. u 17:16 - pre 188 meseci
da kontrolises tab-ovanje koristi TabIndex property kontrole
 
Odgovor na temu

Proko
Martin Hric
St.Pazova

Član broj: 29355
Poruke: 1562
93.86.81.*

Sajt: proko.rs


+28 Profil

icon Re: SetFocus...može li to drugačije16.10.2008. u 18:38 - pre 188 meseci

Kada uradim ovako:

Code:

Private Sub Form_Activate() 
    Fokus 
End Sub

Public Sub Fokus(ByRef cnt As TextBox)
    cnt.SetFocus
    cnt.SelStart = 0
    cnt.SelLength = Len(cnt.Text)  
End Sub


dobijem odgovor:
Compile error:
User-defined type not defined

Nešto mi nedostaje! (Probao sam i neke druge varijante; Text1, Text...)


offtopic:
Hvala!
 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
79.101.77.*



+1 Profil

icon Re: SetFocus...može li to drugačije16.10.2008. u 18:43 - pre 188 meseci
Code:

Private Sub Form_Activate() 
    Fokus text1
End Sub

Public Sub Fokus(ByRef cnt As TextBox)
    cnt.SetFocus
    cnt.SelStart = 0
    cnt.SelLength = Len(cnt.Text)  
End Sub
Prikačeni fajlovi
 
Odgovor na temu

Proko
Martin Hric
St.Pazova

Član broj: 29355
Poruke: 1562
93.86.81.*

Sajt: proko.rs


+28 Profil

icon Re: SetFocus...može li to drugačije16.10.2008. u 19:27 - pre 188 meseci
Ok, to sam ispravio, sad radi, ali i dalje radi isto.
Naime, u pitanju je onaj moj program "Message", koji sam postavio i na sajtu.
Situacija je ovakva: Jedna Forma je minimalizovana i čeka u system tray-u. Na poziv (F12) podiže se druga Forma, i izlazi napred (WindowOnTop). Kursor u TextBoxu trepće, što znači da je primio fokus, i prvi put ostaje i neki drugi prozor ispod u punoj boji (znači ostao je fokus na njemu). Tada, naravno, pisanje teksta nije u TextBox, ali nije ni u taj, preostali aktivan prozor!. Kada to ponovo uradim, onda je sve kako treba. I sve radi dobro, do naredne, veće pauze.
Zato sam pitao, kako da pomoću globalne Tab kontrole postavim moj prozor na prvo mesto (on jeste iznad svih, ali nije aktivan), ili pak, da sve ostale učinim neaktivne.

Citat:
Aleksandar Ružičić: da kontrolises tab-ovanje koristi TabIndex property kontrole


- ako misliš na kontrole unutar Forme, to mi ništa ne rešava.
 
Odgovor na temu

Proko
Martin Hric
St.Pazova

Član broj: 29355
Poruke: 1562
93.86.81.*

Sajt: proko.rs


+28 Profil

icon Re: SetFocus...može li to drugačije16.10.2008. u 20:27 - pre 188 meseci
Pokušao sam sa komandom > SendKeys "{LWIN}D"< i video da ne radi.
Posle sam se setio da sam negde koristio
>Set oShell = CreateObject("Shell.Application"): oShell.MinimizeAll<, ali to ne znam da vratim unazad... odnosno da se svi prozori vrate kako su bili.
Usput sam primetio da, ako upotrebim >SendKeys "bilo šta"< da ne ostaju ispod aktivni prozori, i da u stvari to bi moglo biti rešenje u ovom slučaju.
Naravno, voleo bih da znam zašto je to tako, ali u svakom slučaju upotrebiću za sada to.
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.112.*



+7 Profil

icon Re: SetFocus...može li to drugačije16.10.2008. u 20:36 - pre 188 meseci
Ako treba da postavis formu napred mozes da koristis Win API SetForegroundWindow
Evo ti primer ... kod je u timer eventu i imas i TextBox Text1
Code:

Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Timer1_Timer()
SetForegroundWindow Me.hwnd
Text1.SetFocus
End Sub

 
Odgovor na temu

Proko
Martin Hric
St.Pazova

Član broj: 29355
Poruke: 1562
93.86.81.*

Sajt: proko.rs


+28 Profil

icon Re: SetFocus...može li to drugačije17.10.2008. u 10:08 - pre 188 meseci
Citat:
Eurora3D Team: Ako treba da postavis formu napred mozes da koristis Win API SetForegroundWindow
Evo ti primer ... kod je u timer eventu i imas i TextBox Text1
Code:

Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Timer1_Timer()
SetForegroundWindow Me.hwnd
Text1.SetFocus
End Sub


Neznam zašto, ali taj kod mi ne radi. Treba li uključiti neku od referenci?
Ja sam upotrebio sledeći kod, i to radi bez greške, što se tiče postavljanja forme napred. A fokus na TextBox uvek dobije, kada se prvo uradi SendKeys.
Code:

Private Declare Function SetWindowPos Lib "user32" _
         (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
          ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const HWND_TOPMOST = -1
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Public Function PutWindowOnTop(pFrm As Form)
  Dim lngWindowPosition As Long
  lngWindowPosition = SetWindowPos(pFrm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Function

'******************** 
Private Sub Form_Load()
       Call PutWindowOnTop(Me)
End Sub
Private Sub Timer1_Timer()
        SendKeys " "
        Text1.SetFocus
        Timer1.Enabled = False
End Sub


Hvala Vam svima, rešio sam problem.
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.112.*



+7 Profil

icon Re: SetFocus...može li to drugačije17.10.2008. u 10:22 - pre 188 meseci
@Proko
To je Win API ... obicno ne gresi :)
Mozda ti Timer nije bio ukljucen ....
 
Odgovor na temu

Proko
Martin Hric
St.Pazova

Član broj: 29355
Poruke: 1562
93.86.81.*

Sajt: proko.rs


+28 Profil

icon Re: SetFocus...može li to drugačije17.10.2008. u 23:32 - pre 188 meseci
Nisam se dobro izrazio...radi taj kod, ali ne onako kako meni treba. Naime, forma se pojavi napred, ali možeš je zakloniti sa bilo kojim drugim prozorom. I kada se interval tajmera postavi na > 100, onda trepće u pozadini, ali ne "probija" se napred, što sam očekivao, jer tajmer ponavlja naredbu za to.
Kod, koji sam ja upotrebio, ne dozvoljava da se bilo šta postavi ispred, ali ti to sigurno dobro znaš...
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
195.252.105.*



+7 Profil

icon Re: SetFocus...može li to drugačije18.10.2008. u 00:06 - pre 188 meseci
Da, znam sta je topmost window samo nisam znao sta ti treba & sta je problem
Cisto da napisem , ovaj kod je ok ako imas 1 topmost window ali ako imas vise onda ce moci da jedan zakloni neki drugi ...
 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
79.101.77.*



+1 Profil

icon Re: SetFocus...može li to drugačije18.10.2008. u 07:12 - pre 188 meseci
Ne vidim potrebu za timer-om ako ti treba "Always on top" prozor.

Code:

Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

Private Sub Form_Activate()

    SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, 83
    Text1.SetFocus

End Sub


Ovaj kod radi super i nema bespotrebnog timera.
 
Odgovor na temu

Proko
Martin Hric
St.Pazova

Član broj: 29355
Poruke: 1562
93.86.81.*

Sajt: proko.rs


+28 Profil

icon Re: SetFocus...može li to drugačije18.10.2008. u 09:27 - pre 188 meseci
Pa i nema potrebe, ali naredba SendKeys, koja mi u ovom slučaju obezbeđuje sigurno fokusiranje TextBoxa, radi samo ako se pošalje sa zakašnjenjem. Kao što si mogao da vidiš, Timer na kraju sam sebe isključuje, tj radi samo jednom.
U vezi svega toga je i cela tema pokrenuta, i rešio sam tako taj problem, mada ne znam zašto je to tako, i zna li iko.
 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
79.101.251.*



+1 Profil

icon Re: SetFocus...može li to drugačije18.10.2008. u 11:53 - pre 188 meseci
Verovatno zato sto ti postavljas fokus na Form_Load event-u a ne na Form_Activate. Forma se ucitava samo jednom, tad se desi Form_Load event, i ostaje u memoriji sve dok je ne unloadujes (Unload myForm). Ne mozes da postavis fokus na kontrolu koja se nalazi na neaktivnoj formi. U trenutku ucitavanja forma jos uvek nije aktivna, aktivira se tek kad dobije fokus.

Kod koji sada koristis nece lepo raditi ukoliko imas vise formi koje trebaju da budu "Always On Top". Forma koja se poslednja ucita ce uvek biti na vrhu, bez obzira koja je forma izabrana. Dobices i treperenje u taskbaru ukoliko se sub Timer1_Timer izvrsi u trenutku kada je neki drugi program aktivan.

Sa ovim kodom ces to ispraviti.

Code:

Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _ 
ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

Private Sub Form_Activate()

    SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, 83
    Text1.SetFocus

End Sub


[Ovu poruku je menjao stefanpn dana 18.10.2008. u 13:03 GMT+1]
 
Odgovor na temu

[es] :: Visual Basic 6 :: SetFocus...može li to drugačije

[ Pregleda: 2247 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.