Jump to content

Oluşturduğum Guideki Tab Tuşu Sorunu!


mustafakara
 Share

Recommended Posts

sevgili arkadaşlar merhabalar
aşağıdaki örnekte gui üzerinde tab tuşu ile hareket ettiğimizde GUICtrlCreateSlider in üzerine gitmiyor
button ve liste kutuları arasında dolaşıp kalıyor tab tuşu ile hız ayarının üzerine gelebilmek için nasıl birşey yazmalıyım
teşekkürler


;#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>
Opt('MustDeclareVars', 1)

Example()

Func Example()

Local $mylist, $msg
GUICreate("ayarlar",600,300)
GUICtrlCreateLabel("kişi", 176, 2, 300, 20, 1)
$mylist = GUICtrlCreateList("", 176, 32, 300, 30)
GUICtrlSetFont(-1, 16, 800)
Local $oku = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices","DefaultTokenId")
Local $oku1 = RegRead($oku & "\Attributes","Name")
_GUICtrlListBox_SelectString($mylist, $oku1)
GUICtrlCreateLabel("hız:", 176, 85, 300, 20, 1)
GUICtrlSetFont(-1, 12, 800)
Local $hSlider = GUICtrlCreateSlider(176, 100, 300, 40)
_GUICtrlSlider_SetLineSize($hSlider, 5)
GUICtrlCreateButton("ekran okuyucuyu aç", 176, 135, 300, 25 )
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndFunc ;==>Example
Link to comment
Share on other sites

@mustafakara

Aslında varsayılan olarak gemesi daha mantıklı. Heralde geliştiricilerin gözünden kaçmış...
Aşağıdakini örneği dene...

[codebox];#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>
Opt('MustDeclareVars', 1)

Example()

Func Example()

Local $mylist, $msg
GUICreate("ayarlar", 600, 300)
GUICtrlCreateLabel("kişi", 176, 2, 300, 20, 1)
$mylist = GUICtrlCreateList("", 176, 32, 300, 30)
GUICtrlSetFont(-1, 16, 800)
Local $oku = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices", "DefaultTokenId")
Local $oku1 = RegRead($oku & "\Attributes", "Name")
_GUICtrlListBox_SelectString($mylist, $oku1)
GUICtrlCreateLabel("hız:", 176, 85, 300, 20, 1)
GUICtrlSetFont(-1, 12, 800)
Local $hSlider = GUICtrlCreateSlider(176, 100, 300, 40, 0x50010019)
_GUICtrlSlider_SetLineSize($hSlider, 5)
GUICtrlCreateButton("ekran okuyucuyu aç", 176, 135, 300, 25)
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndFunc ;==>Example[/codebox]

Link to comment
Share on other sites

sevgili blue_life


söylediğin gibi var sayılan olarak gelmeli ancak buda oldu
bu sonuna eklediklerini nerden buluyorsun genellikle #include kullanmak yerine bunları kullanıyorsun
bu benim oldukca dikkatimi çekmişti de bu yaptığın değişiklik ne anlama geliyor
yani şu satırdaki
Local $hSlider = GUICtrlCreateSlider(176, 100, 300, 40, 0x50010019)
neyse teşekkürler eline sağlık

Link to comment
Share on other sites

[font="'Franklin Gothic Medium"][size="3"]@mustafakara;[/size][/font]
[font="'Franklin Gothic Medium"][size="3"]Guı elemanının sonuna eklediği kodlar (0x50010019 vs.) C:\Program Files\AutoIt3\Include içindeki ilgili kütüphane dosyalarından seçtiği kodlardır.Ayrıca @blue_life include kullanmaz.Onun mantığı birkaç kod için koca kütüphane script dosyasına dahil etmek gereksiz ve programın ağır çalışmasını sağlayan yöntemdir diyebiliriz.Mantıklı olan da bu aslında.Kendisiyle aynı yöntemi kullanıyorum.Misal $GUI_EVENT_CLOSE kodu; çıkmak için <GUIConstantsEx.au3> kütüphanesini dahil etmen gerekir.Bunu yaparken tüm include dosyasını programa dahil etmiş olıursun.Onun yerine -3 Kullanman kafidir.Umarım anlatabilmişimdir.[/size][/font]

Link to comment
Share on other sites

anladım sevgili , SimpsoN_Bartteşekkür ediyorum
birde sizlere birşey sormak istiyorum
bir sesli gui ekranı oluşturmak istiyorum bu yüzden dolayı gui üzerinde tab tuşu ile dolaşırken
hangi gui elemanı üzerinde olduğumu yani gui elemanının türü örneğin buton üzerindeysem buton liste kutusu üzerindeysem listekutusu olduğunu ve bunların mevcut olan değerlerini nasıl alabilirim ben ben bunları sese dökmek istiyorum ancak bunu msgbox ile belirtirseniz ben sese dökerim.
örneğin şu şekilde birşey istiyorum
gui ekranımız açıldı
tabtuşuna bastık creckbox üzerine gitti ve uyarı msgbox
beni hatırla onay kutusu seçildi ve işaretli değil diye bir uyarı aldık
tekrar tab tuşu yaptık ve button üzerine gittik msgbox tamam button uyarısı verdi
yani buttonun button olduğunu belirtirken butonun üzerinde yazan değeride belirtecek
böyle bir şey yapmak mümkünmüdür acaba

Link to comment
Share on other sites

sevgili arkadaşlar
ben yukarıda bahsettiğim konuda 1 örnek yaptım
liste kutusu içerisinde yapılan değişiklikleri ilgili sentezleyicinin sesinden aktarıyor
hız ayarını default olan sentezleyici ile konuşuyor
ancak benim istediğim
tab tuşu ile gezerkende üzerinde olduğum gui elemanının türünü ve değerini vermesini istiyorum
listenin üzerine geldiğimde "listekutusu" ve seçili olan sentezleyici "..." buttonun üzerine geldiğimde "button ekran okuyucuyu aç" hız ayarının üzerine geldiğimde "yatay yol göstergesi ...%" gibi sentezleyicinin konuşmasını istiyorum
aşağıdaki örnekte sapi5 e göre çalışmaktadır türkce sentezleyici yoksa sam ın sesi ile ingilizce olarak konuşacaktır
tab tuşu hakkında yardımcı olursanız sevinirim

örnek:

;#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiSlider.au3>
Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)

Global $mylist
Global $hSlider
Global $baslik = "ayarlar"
Global $oku = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices", "DefaultTokenId")
Global $oku1 = RegRead($oku & "\Attributes", "Name")
ornek()

Func ornek()


Local $mygui = GUICreate($baslik, 600, 300)
GUICtrlCreateLabel("kişi", 176, 2, 300, 20, 1)
GUISetOnEvent(-3, "_close")
$mylist = GUICtrlCreateList("", 176, 32, 300, 30)
GUICtrlSetFont(-1, 16, 800)
sesler($mylist)
_GUICtrlListBox_SelectString($mylist, $oku1)
GUICtrlSetOnEvent($mylist, "_mylist")

GUICtrlCreateLabel("hız:", 176, 85, 300, 20, 1)
GUICtrlSetFont(-1, 12, 800)
$hSlider = GUICtrlCreateSlider(176, 100, 300, 27, 0x50010019)
GUICtrlSetOnEvent($hSlider, "_hSlider")
_GUICtrlSlider_SetLineSize($hSlider, 5)
;_Slider_defaultpoz($hSlider,0)
Local $button1 = GUICtrlCreateButton("ekran okuyucuyu aç",176, 145, 300, 27)
GUISetState()
_Speak($oku1, 2, 100, $baslik & "sayfa")

While 1
WEnd
EndFunc ;==>ornek

Func _close()
Exit
EndFunc ;==>_close

Func _mylist()
_Speak(GUICtrlRead($mylist), 2, 100, GUICtrlRead($mylist))
EndFunc ;==>_mylist

Func _hSlider()
;_Slider_defaultpoz($hSlider,1)
Local $seviye = _GUICtrlSlider_GetPos($hSlider)
_Speak($oku1, 2, 100, $seviye & "%")
EndFunc ;==>_hSlider

Func sesler($listem)
Local $yol = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\"
For $i = 1 To 10
Local $var = RegEnumKey($yol, $i)

If @error <> 0 Then ExitLoop
Local $oku = RegRead($yol & $var & "\Attributes", "Name")
GUICtrlSetData($listem, $oku)

Next
EndFunc ;==>sesler

Func _default_reg()
Local $yol = "HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices"
;"DefaultTokenId"="HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\Levent16k"
;"DefaultTTSRate"=dword:1

;RegWrite(
EndFunc ;==>_default_reg

Func _Speak($sVoice, $iRate, $iVol, $s_txt)
Local $objSpeech = ObjCreate("Sapi.SpVoice")

$objSpeech.Voice = $objSpeech.GetVoices("Name=" & $sVoice).Item(0)
$objSpeech.Rate = $iRate
$objSpeech.Volume = $iVol
$objSpeech.Speak($s_txt)

EndFunc ;==>_Speak

Link to comment
Share on other sites

@mustafakara

Bir örnek yaptım ama kodlarındaki hataları düzeltmedim. Neyse örneği incele.
Benim bir süre kaçmam gerekiyor. Kolay gelsin...

[codebox];#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiSlider.au3>

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)

Global $mylist
Global $hSlider
Global $baslik = "ayarlar"
Global $oku = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices", "DefaultTokenId")
Global $oku1 = RegRead($oku & "\Attributes", "Name")
ornek()

Func ornek()

Local $mygui = GUICreate($baslik, 600, 300)
GUICtrlCreateLabel("kişi", 176, 2, 300, 20, 1)
GUISetOnEvent(-3, "_close")
$mylist = GUICtrlCreateList("", 176, 32, 300, 30)
GUICtrlSetFont(-1, 16, 800)
sesler($mylist)
_GUICtrlListBox_SelectString($mylist, $oku1)
GUICtrlSetOnEvent($mylist, "_mylist")

GUICtrlCreateLabel("hız:", 176, 85, 300, 20, 1)
GUICtrlSetFont(-1, 12, 800)
$hSlider = GUICtrlCreateSlider(176, 100, 300, 27, 0x50010019)
GUICtrlSetOnEvent($hSlider, "_hSlider")
_GUICtrlSlider_SetLineSize($hSlider, 5)
;_Slider_defaultpoz($hSlider,0)
Local $button1 = GUICtrlCreateButton("ekran okuyucuyu aç", 176, 145, 300, 27)
GUISetState()
_Speak($oku1, 2, 100, $baslik & "sayfa")

; ---------------------
Local $Gui_Ctrl_Total = 3
Local $Gui_Ctrl_List[$Gui_Ctrl_Total +1][3] = [[$Gui_Ctrl_Total], _
[$mylist,GUICtrlGetHandle($mylist),"Aktif olan Liste"], _
[$hSlider,GUICtrlGetHandle($hSlider),"Aktif olan Slider"], _
[$button1,GUICtrlGetHandle($button1),"Aktif olan ekran okuyucuyu aç butonu"]]
; ---------------------



While 1
$Gui_Ctrl_List[0][1] = __WinAPI_GetFocus()
If $Gui_Ctrl_List[0][1] <> $Gui_Ctrl_List[0][2] Then
$Gui_Ctrl_List[0][2] = $Gui_Ctrl_List[0][1]
For $I = 1 to $Gui_Ctrl_List[0][0]
If $Gui_Ctrl_List[$I][1] = $Gui_Ctrl_List[0][1] Then
_Speak($oku1, 2, 100, $Gui_Ctrl_List[$I][2])
ExitLoop
EndIf

Next
EndIf
Sleep(50) ;Cpu save
WEnd
EndFunc ;==>ornek

Func _close()
Exit
EndFunc ;==>_close

Func _mylist()
_Speak(GUICtrlRead($mylist), 2, 100, GUICtrlRead($mylist))
EndFunc ;==>_mylist

Func _hSlider()
;_Slider_defaultpoz($hSlider,1)
Local $seviye = _GUICtrlSlider_GetPos($hSlider)
_Speak($oku1, 2, 100, $seviye & "%")
EndFunc ;==>_hSlider

Func sesler($listem)
Local $yol = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\"
For $i = 1 To 10
Local $var = RegEnumKey($yol, $i)

If @error <> 0 Then ExitLoop
Local $oku = RegRead($yol & $var & "\Attributes", "Name")
GUICtrlSetData($listem, $oku)

Next
EndFunc ;==>sesler

Func _default_reg()
Local $yol = "HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices"


;RegWrite(
EndFunc ;==>_default_reg

Func _Speak($sVoice, $iRate, $iVol, $s_txt)
Local $objSpeech = ObjCreate("Sapi.SpVoice")

$objSpeech.Voice = $objSpeech.GetVoices("Name=" & $sVoice).Item(0)
$objSpeech.Rate = $iRate
$objSpeech.Volume = $iVol
$objSpeech.Speak($s_txt)

EndFunc ;==>_Speak

Func __WinAPI_GetFocus()
Local $aResult = DllCall("user32.dll", "hwnd", "GetFocus")
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[0]
EndFunc ;==>__WinAPI_GetFocus[/codebox]

Edited by blue_life
Link to comment
Share on other sites

sevgili blue_life teşekkürler eline sağlık
ben şehir dışına çıkmıştım pek
o gün inceleme fırsatım olmamıştı baktım apartopar çıktım.
lakin bu örnekte nerede olduğumu okuyor ancak liste kutusu içersinde yazan değerleri ve sliderin durumunu okumuyor
onuda okuttum ancak guinin ilk açıldığı değerleri okuyor sanıyorum bunları bütün olarak döngü içerisine almak gerekiyor
yani şu şekilde okumasını istiyorum tab tuşuna bastığımızda aktif olan slider 55 % demeli değişiklik yaptığımızda zaten yeni değerleri okuyor ancak dolaşıp aynı yere geldiğimizde son değerini okumalı bunu nasıl yapabiliriz

Link to comment
Share on other sites

@mustafakara

Malesef isteğini tam anlamadım. Ama senin için biraz düzenleme yaptım. Kurcalarsın, kolay gelsin...

[codebox];#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiSlider.au3>

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)

Global $mylist
Global $hSlider
Global $baslik = "ayarlar"
Global $oku = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices", "DefaultTokenId")
Global $oku1 = RegRead($oku & "\Attributes", "Name")
ornek()

Func ornek()

Local $mygui = GUICreate($baslik, 600, 300)
GUICtrlCreateLabel("kişi", 176, 2, 300, 20, 1)
GUISetOnEvent(-3, "_close")
$mylist = GUICtrlCreateList("", 176, 32, 300, 30)
GUICtrlSetFont(-1, 16, 800)
sesler($mylist)
_GUICtrlListBox_SelectString($mylist, $oku1)
GUICtrlSetOnEvent($mylist, "_mylist")

GUICtrlCreateLabel("hız:", 176, 85, 300, 20, 1)
GUICtrlSetFont(-1, 12, 800)
$hSlider = GUICtrlCreateSlider(176, 100, 300, 27, 0x50010019)
GUICtrlSetOnEvent($hSlider, "_hSlider")
_GUICtrlSlider_SetLineSize($hSlider, 5)
;_Slider_defaultpoz($hSlider,0)
Local $button1 = GUICtrlCreateButton("ekran okuyucuyu aç", 176, 145, 300, 27)
GUISetState()
_Speak($oku1, 2, 100, $baslik & "sayfa")

; ---------------------
Local $Gui_Ctrl_Total = 3
Local $Gui_Ctrl_List[$Gui_Ctrl_Total +1][3] = [[$Gui_Ctrl_Total], _
[$mylist,GUICtrlGetHandle($mylist),"Aktif olan Liste"], _
[$hSlider,GUICtrlGetHandle($hSlider),"Aktif olan Slider"], _
[$button1,GUICtrlGetHandle($button1),"Aktif olan ekran okuyucuyu aç butonu"]]
; ---------------------


Local $SilerRead1,$SilerRead2
While 1
$Gui_Ctrl_List[0][1] = __WinAPI_GetFocus()
If $Gui_Ctrl_List[0][1] <> $Gui_Ctrl_List[0][2] Then
$Gui_Ctrl_List[0][2] = $Gui_Ctrl_List[0][1]
For $I = 1 to $Gui_Ctrl_List[0][0]
If $Gui_Ctrl_List[$I][1] = $Gui_Ctrl_List[0][1] Then
Switch $I
Case 1 ;Liste
_Speak($oku1, 2, 100, $Gui_Ctrl_List[$I][2] & " Seçili olan: " & GUICtrlRead($Gui_Ctrl_List[$I][0]))
Case 2 ;Slider
_Speak($oku1, 2, 100, $Gui_Ctrl_List[$I][2] & " Oran: " & GUICtrlRead($Gui_Ctrl_List[$I][0]))
Case Else ;Diğerleri
_Speak($oku1, 2, 100, $Gui_Ctrl_List[$I][2])
EndSwitch
ExitLoop
EndIf

Next
EndIf

$SilerRead1 = GUICtrlRead($hSlider)
If $SilerRead1 <> $SilerRead2 Then
$SilerRead2 = $SilerRead1
_Speak($oku1, 2, 100, "Oran: " & $SilerRead2)
EndIf

Sleep(50) ;Cpu save
WEnd
EndFunc ;==>ornek

Func _close()
Exit
EndFunc ;==>_close

Func _mylist()
_Speak(GUICtrlRead($mylist), 2, 100, GUICtrlRead($mylist))
EndFunc ;==>_mylist

Func _hSlider()
;_Slider_defaultpoz($hSlider,1)
Local $seviye = _GUICtrlSlider_GetPos($hSlider)
_Speak($oku1, 2, 100, $seviye & "%")
EndFunc ;==>_hSlider

Func sesler($listem)
Local $yol = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\"
For $i = 1 To 10
Local $var = RegEnumKey($yol, $i)

If @error <> 0 Then ExitLoop
Local $oku = RegRead($yol & $var & "\Attributes", "Name")
GUICtrlSetData($listem, $oku)

Next
EndFunc ;==>sesler

Func _default_reg()
Local $yol = "HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices"


;RegWrite(
EndFunc ;==>_default_reg

Func _Speak($sVoice, $iRate, $iVol, $s_txt)
Local $objSpeech = ObjCreate("Sapi.SpVoice")

$objSpeech.Voice = $objSpeech.GetVoices("Name=" & $sVoice).Item(0)
$objSpeech.Rate = $iRate
$objSpeech.Volume = $iVol
$objSpeech.Speak($s_txt)

EndFunc ;==>_Speak

Func __WinAPI_GetFocus()
Local $aResult = DllCall("user32.dll", "hwnd", "GetFocus")
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[0]
EndFunc ;==>__WinAPI_GetFocus[/codebox]

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...