Как на WinApi написать StringGrid
Участников: 2
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Как на WinApi написать StringGrid
понадобилась мне такая штука как StringGrid. дело в том, что эта штука должна озвучиваться говорилками, поэтому и хочу на WinApi.
вот ссылка на игрушку, как оно выглядит. 664 кб, не поленитесь:
http://svalka-spb.narod.ru/games/sapper2.0.7z
говорят, что можно написать используя класс окна SysListView32.
мне не надо наворотов. просто хочу инструментарий к своим говорящим часикам сделать, чтоб собирать голоса было удобнее. вот и думаю, что таблица в самый раз подойдет.
можно на edit сделать, но лажа выйдет. мне надо, чтоб нажал стрелку вправо, а он на следующую клетку переместился.
я вручную не собираюсь вводить данные. в ячейках будут находится имена файлов.
вот ссылка на игрушку, как оно выглядит. 664 кб, не поленитесь:
http://svalka-spb.narod.ru/games/sapper2.0.7z
говорят, что можно написать используя класс окна SysListView32.
мне не надо наворотов. просто хочу инструментарий к своим говорящим часикам сделать, чтоб собирать голоса было удобнее. вот и думаю, что таблица в самый раз подойдет.
можно на edit сделать, но лажа выйдет. мне надо, чтоб нажал стрелку вправо, а он на следующую клетку переместился.
я вручную не собираюсь вводить данные. в ячейках будут находится имена файлов.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Как на WinApi написать StringGrid
Серега, контрол, что ты озвучил кустарный, хоть и идет в поставке VB. Реализация кустарных контролов занимает значительно больше времени, чем реализация имеющихся. Для твоего случая мне кажется проще использовать контрол ListBox.
Вот как твоя задача решается с помощью disphelper и window9:
Кстати, я только сейчас заметил, что в поставке FreeBasic 0.24 , статическая либа дисхелпера не включена. Непонятно, чем она им мешала. В 0.23 была.
Вот как твоя задача решается с помощью disphelper и window9:
- Код:
#DEFINE UNICODE
#Include Once "disphelper/disphelper.bi"
#Include "window9.bi"
Sub speak (ByRef text As String)
Dim myt As WString * 256
Dim As Integer isSpeaking
Dim As HRESULT hr
DISPATCH_OBJ(tts)
dhInitialize(TRUE)
dhToggleExceptions(FALSE)
myt = "Sapi.SpVoice"
hr = dhCreateObject(@myt, NULL, @tts)
If hr <> 0 Then Exit Sub
myt = text
dhCallMethod(tts, ".Speak(%S)", @myt)
SAFE_RELEASE(tts)
End Sub
Var hwnd = OpenWindow("",10,10,300,100)
AddKeyboardShortcut(hwnd,FVIRTKEY,VK_RETURN,1) 'Enter
ListBoxGadget(1,10,10,100,80)
AddListBoxItem(1,"one")
AddListBoxItem(1,"two")
AddListBoxItem(1,"three")
Do
Var event=WaitEvent()
If event=eventclose Then End
If event=eventmenu Then
If EventNumber()=1 Then
ThreadCall speak(GetListBoxText(1,GetItemListBox(1)))
EndIf
EndIf
Loop
Кстати, я только сейчас заметил, что в поставке FreeBasic 0.24 , статическая либа дисхелпера не включена. Непонятно, чем она им мешала. В 0.23 была.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как на WinApi написать StringGrid
привет. спасибо, буду пробовать. а по поводу говорилок, это мне нужно не на сапи, а чтоб скринридерами читалось. если юзать winapi, специально писать ни чего не надо.
все-равно спасибо за наглядный пример.
да, FreeBasic 0.24 сделали все-таки отвратно. как можно забыть библиотеку, если она наверняка в проекте есть.
все-равно спасибо за наглядный пример.
да, FreeBasic 0.24 сделали все-таки отвратно. как можно забыть библиотеку, если она наверняка в проекте есть.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Как на WinApi написать StringGrid
привет. посмотрел. только пришлось ошибки в dsound.bi исправлять. перекачивать zlib.
первое. фокус не на listbox.
второе. я так понял, что бы сделать такую таблицу как в предлагаемом мною выше сапёре, нужно несколько лист box'ов?
блин, и скорее всего надо будет делать сабклассинг окон?
поясню еще раз что мне нужно. таблица как в экселе.
а1 б1 ц1
а2 б2 ц2
если делать на листбоксах, нужно что бы при нажатии стрелки вправо, он перемещался не на следующий элемент текущего листбокса, а на другой листбокс, причем с учетом позиции первого.
нажали вправо, переместились с а1 на б1. нажали вниз, переместились с б1 на б2.
ладно, буду думать. блин, я то думал, что есть какой-нибудь класс, в который просто элементы добавлять можно.
везет delphi'рам, у них такое встроено, называется TStringGrid.
надо посмотреть как сделано, и на fb соорудить.
вещь иногда нужная.
первое. фокус не на listbox.
второе. я так понял, что бы сделать такую таблицу как в предлагаемом мною выше сапёре, нужно несколько лист box'ов?
блин, и скорее всего надо будет делать сабклассинг окон?
поясню еще раз что мне нужно. таблица как в экселе.
а1 б1 ц1
а2 б2 ц2
если делать на листбоксах, нужно что бы при нажатии стрелки вправо, он перемещался не на следующий элемент текущего листбокса, а на другой листбокс, причем с учетом позиции первого.
нажали вправо, переместились с а1 на б1. нажали вниз, переместились с б1 на б2.
ладно, буду думать. блин, я то думал, что есть какой-нибудь класс, в который просто элементы добавлять можно.
везет delphi'рам, у них такое встроено, называется TStringGrid.
надо посмотреть как сделано, и на fb соорудить.
вещь иногда нужная.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Как на WinApi написать StringGrid
Извиняй, не понял. Я думал тебе просто перечисления их нужно. Тогда только свой контрол городить. С ListView ... я бы не стал. Там хоть и есть табличка, но выделяется только первая колонка, остальные может и можно сделать, но помудрить придется. Лучше из нескольких edit сварганить.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как на WinApi написать StringGrid
в 31 уроке туториалов ицзелиона, обнаружил описание про ListView.
поскольку я не адаптировал этот урок под FreeBasic, уже забыл что там такое есть.
там рассказывается, что можно добавлять колонки при помощи LVM_INSERTCOLUMN , может оно лучше будет? пойду почитаю.
по поводу едитов, надо будет и едиты расковыривать, так как при нажатии стрелок влево/вправо, оно по символам перемещается. а надо чтоб на другоой едит прыгал
поскольку я не адаптировал этот урок под FreeBasic, уже забыл что там такое есть.
там рассказывается, что можно добавлять колонки при помощи LVM_INSERTCOLUMN , может оно лучше будет? пойду почитаю.
по поводу едитов, надо будет и едиты расковыривать, так как при нажатии стрелок влево/вправо, оно по символам перемещается. а надо чтоб на другоой едит прыгал
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Как на WinApi написать StringGrid
electrik пишет:в 31 уроке туториалов ицзелиона, обнаружил описание про ListView.
поскольку я не адаптировал этот урок под FreeBasic, уже забыл что там такое есть.
там рассказывается, что можно добавлять колонки при помощи LVM_INSERTCOLUMN , может оно лучше будет? пойду почитаю.
по поводу едитов, надо будет и едиты расковыривать, так как при нажатии стрелок влево/вправо, оно по символам перемещается. а надо чтоб на другоой едит прыгал
Про listView можешь почитать здесь:
http://freebasic.narod.ru/api_206.html
Или здесь:
http://freebasic.narod.ru/api_16.html
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как на WinApi написать StringGrid
Я тут на коленке написал черновик так сказать. Если уж и это не подойдет, тогда сам ищи
- Код:
#DEFINE UNICODE
#Include Once "disphelper/disphelper.bi"
#Include "window9.bi"
Dim As Integer event,i=1,array(10,20)={{1}}, curent = 1
Dim as HWND hwnd
Sub speak (ByRef text As String)
Dim myt As WString * 256
Dim As Integer isSpeaking
Dim As HRESULT hr
DISPATCH_OBJ(tts)
dhInitialize(TRUE)
dhToggleExceptions(FALSE)
myt = "Sapi.SpVoice"
hr = dhCreateObject(@myt, NULL, @tts)
If hr <> 0 Then Exit Sub
myt = text
dhCallMethod(tts, ".Speak(%S)", @myt)
SAFE_RELEASE(tts)
End Sub
hwnd=OpenWindow("Ïðèâåò",10,10,583,500) : CenterWindow(hwnd)
AddKeyboardShortcut(hwnd,FVIRTKEY,VK_UP,1)
AddKeyboardShortcut(hwnd,FVIRTKEY,VK_DOWN,2)
AddKeyboardShortcut(hwnd,FVIRTKEY,VK_LEFT,3)
AddKeyboardShortcut(hwnd,FVIRTKEY,VK_RIGHT,4)
For y As Integer = 0 To 20
For x As Integer = 0 To 10
TextGadget(i,x*50+10,y*20+20,45,15,Str(i))
SetGadgetColor(i,&h505050,255,3)
i+=1
Next
Next
SetGadgetColor(curent,&hb0b0b0,255,3)
Do
event=WaitEvent()
Select Case event
Case eventmenu
select Case EventNumber
Case 1
If curent - 11>0 Then
curent-=11
SetGadgetColor(curent+11,&h505050,255,3)
SetGadgetColor(curent,&hb0b0b0,255,3)
ThreadCall speak(Str(curent))
EndIf
Case 2
If curent + 11<232 Then
curent+=11
SetGadgetColor(curent-11,&h505050,255,3)
SetGadgetColor(curent,&hb0b0b0,255,3)
ThreadCall speak(Str(curent))
EndIf
Case 3
If curent - 1>0 Then
curent-=1
SetGadgetColor(curent+1,&h505050,255,3)
SetGadgetColor(curent,&hb0b0b0,255,3)
ThreadCall speak(Str(curent))
EndIf
Case 4
If curent + 1<232 Then
curent+=1
SetGadgetColor(curent-1,&h505050,255,3)
SetGadgetColor(curent,&hb0b0b0,255,3)
ThreadCall speak(Str(curent))
EndIf
End Select
End Select
If Event=EventClose Then End
Loop
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как на WinApi написать StringGrid
спасибо огрромнейшее! этот пример работает. правда в скринридере не читает, из-за не стандартного класса окна.
я в скринридер добавил цвет выделения, вроде зачитал.
буду ковырять, может и на основе window9 реализую свою прогу.
очень жаль, что в современных приложениях народ все больше реализует не стандартные классы окон.
в нашем случае все хорошо, не сложно прогнуться. простой пример и не на рисованной картинке.
а вот бывают проги, которые запускаешь, а на экране читалка вообще ни чего не видит.
мало того, еще и управление с клавиатуры вообще на нуле.
всеми не любимый билгейц сказал, чтоб программисты в своих программах обязательно делали поддержку управления с клавиатуры.
возьмем vst плагины. мрак, все графическое, а клаву вообще выбросить можно.
это я не в коем случае не в обиду говорю, просто людям с ограниченными возможностями бывает очень сильно приходится прогибаться.
за место того, чтобы работать за компьютером, сидишь и пишешь скрипт, как бы эту программу под себя прогнуть.
хорошо если умеешь написать скрипт...
если чего-нибудь новое придумаю, солью.
я в скринридер добавил цвет выделения, вроде зачитал.
буду ковырять, может и на основе window9 реализую свою прогу.
очень жаль, что в современных приложениях народ все больше реализует не стандартные классы окон.
в нашем случае все хорошо, не сложно прогнуться. простой пример и не на рисованной картинке.
а вот бывают проги, которые запускаешь, а на экране читалка вообще ни чего не видит.
мало того, еще и управление с клавиатуры вообще на нуле.
всеми не любимый билгейц сказал, чтоб программисты в своих программах обязательно делали поддержку управления с клавиатуры.
возьмем vst плагины. мрак, все графическое, а клаву вообще выбросить можно.
это я не в коем случае не в обиду говорю, просто людям с ограниченными возможностями бывает очень сильно приходится прогибаться.
за место того, чтобы работать за компьютером, сидишь и пишешь скрипт, как бы эту программу под себя прогнуть.
хорошо если умеешь написать скрипт...
если чего-нибудь новое придумаю, солью.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Как на WinApi написать StringGrid
electrik пишет:спасибо огрромнейшее! этот пример работает. правда в скринридере не читает, из-за не стандартного класса окна.
я в скринридер добавил цвет выделения, вроде зачитал.
буду ковырять, может и на основе window9 реализую свою прогу.
очень жаль, что в современных приложениях народ все больше реализует не стандартные классы окон.
в нашем случае все хорошо, не сложно прогнуться. простой пример и не на рисованной картинке.
а вот бывают проги, которые запускаешь, а на экране читалка вообще ни чего не видит.
мало того, еще и управление с клавиатуры вообще на нуле.
всеми не любимый билгейц сказал, чтоб программисты в своих программах обязательно делали поддержку управления с клавиатуры.
возьмем vst плагины. мрак, все графическое, а клаву вообще выбросить можно.
это я не в коем случае не в обиду говорю, просто людям с ограниченными возможностями бывает очень сильно приходится прогибаться.
за место того, чтобы работать за компьютером, сидишь и пишешь скрипт, как бы эту программу под себя прогнуть.
хорошо если умеешь написать скрипт...
если чего-нибудь новое придумаю, солью.
То есть как нестандартный класс? Самый стандартный и есть (Static) Изменение цвета контрола я сделал только для визуального восприятия того, кто может тебе дома помочь. А так можно цвет вообще не менять, только текст при желании.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как на WinApi написать StringGrid
теперь ты меня извиняй. я не правильно посмотрел. тот класс который я увидел это был класс не статиков, а класс главного окна CLASSCLASS_1.
вот я и подумал, что он не стандартный. но все-равно почему-то цвет добавлять в говорилку приходится.
это ладно, тут уж разберусь. возможно, что она понимает определенный набор цветов, который выясним путём поддбора.
насамом деле, у меня была идея на статиках сделать, но я почему-то думал, что так можно, но так ни кто не делает.
видимо можно. и вообще я прихожу к такому мнению, что надо использовать всё так как тебе удобно.
вот я и подумал, что он не стандартный. но все-равно почему-то цвет добавлять в говорилку приходится.
это ладно, тут уж разберусь. возможно, что она понимает определенный набор цветов, который выясним путём поддбора.
насамом деле, у меня была идея на статиках сделать, но я почему-то думал, что так можно, но так ни кто не делает.
видимо можно. и вообще я прихожу к такому мнению, что надо использовать всё так как тебе удобно.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|