listbox или какие-нибудь другие простые списки
Участников: 5
FreeBasic :: Программирование :: Общее
Страница 1 из 1
listbox или какие-нибудь другие простые списки
Друзья! Меня вчера немного озадачили вопросом.
Ну а я решил перевести стрелки на форум.
Нужно создать окно, в нём список элементов, которые можно активировать кликом или enterom.
Вот собственно и всё!
У кого-нибудь есть простой исходник такой проги?
А, да. Нужно winApi. И без внешних библиотек.
Ну а я решил перевести стрелки на форум.
Нужно создать окно, в нём список элементов, которые можно активировать кликом или enterom.
Вот собственно и всё!
У кого-нибудь есть простой исходник такой проги?
А, да. Нужно winApi. И без внешних библиотек.
Re: listbox или какие-нибудь другие простые списки
Ага. Погоди, покопаюсь, кое-что найду и выложу как пример в онлайн книгу.
Re: listbox или какие-нибудь другие простые списки
с использованием GUI TK rev 3 от eodor winAPI выглядит гораздо проще, рекомендую:
#INCLUDE "Source\GUI.bi"
#INCLUDE "Source\TListBox.bi"
#INCLUDE "Source\TStatusBar.bi"
' variable definitions
Declare Sub UpdateStatus(Sender As TListBox)
Dim Shared As TForm Form
Dim Shared As TListBox ListBox
Dim Shared As TStatusBar StatusBar
' main form create
Form.MainForm = 1
Form.FormStyle = 1
Form.Caption = "Моя тестовая форма"
Form.Width = 500
Form.Height = 600
Form.Create
'status bar
StatusBar.SimplePanel = true
StatusBar.Align = 4 ' albottom
StatusBar.SimpleText = "проверка статусбара"
StatusBar.Parent = Form
StatusBar.Visible = True
'listbox
ListBox.Parent = Form
ListBox.Top = 2
ListBox.Left = 2
ListBox.Width = 400
ListBox.Height = 200
ListBox.Visible = true
ListBox.Columns = 2
ListBox.Align = 5
ListBox.LoadFromFile("list.txt")
ListBox.OnChange = @UpdateStatus
ListBox.Hint = "Проверочный список"
ListBox.ShowHint = True
Form.Show
Application.Run
' end of main()
Sub UpdateStatus(Sender As TListBox)
StatusBar.SimpleText = Sender.Item(Sender.CaretIndex)
End Sub
#INCLUDE "Source\GUI.bi"
#INCLUDE "Source\TListBox.bi"
#INCLUDE "Source\TStatusBar.bi"
' variable definitions
Declare Sub UpdateStatus(Sender As TListBox)
Dim Shared As TForm Form
Dim Shared As TListBox ListBox
Dim Shared As TStatusBar StatusBar
' main form create
Form.MainForm = 1
Form.FormStyle = 1
Form.Caption = "Моя тестовая форма"
Form.Width = 500
Form.Height = 600
Form.Create
'status bar
StatusBar.SimplePanel = true
StatusBar.Align = 4 ' albottom
StatusBar.SimpleText = "проверка статусбара"
StatusBar.Parent = Form
StatusBar.Visible = True
'listbox
ListBox.Parent = Form
ListBox.Top = 2
ListBox.Left = 2
ListBox.Width = 400
ListBox.Height = 200
ListBox.Visible = true
ListBox.Columns = 2
ListBox.Align = 5
ListBox.LoadFromFile("list.txt")
ListBox.OnChange = @UpdateStatus
ListBox.Hint = "Проверочный список"
ListBox.ShowHint = True
Form.Show
Application.Run
' end of main()
Sub UpdateStatus(Sender As TListBox)
StatusBar.SimpleText = Sender.Item(Sender.CaretIndex)
End Sub
Re: listbox или какие-нибудь другие простые списки
DoReMi, а не могли бы вы поподробнее рассказать об этом, например в теме Интерфейсная библиотека
Что это такое, как работает.
Что это такое, как работает.
Re: listbox или какие-нибудь другие простые списки
Только вот что-то мне кажется, что он форумом ошибся - это явно не на FB написано...
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: listbox или какие-нибудь другие простые списки
Eric-S пишет:DoReMi, а не могли бы вы поподробнее рассказать об этом, например в теме Интерфейсная библиотека
Что это такое, как работает.
Да не могу я подробнее ) не пейсатель.
Коротко могу -
Однажды, давным-давно, в далекой Румынии родился программер... <...>
Вобчем WinAPI вы наверное знаете. Какой это геморрой на ём рисовать интерфейс. То есть познакомиться с ним конечно можно, но чисто для академического интереса. Сишники к примеру юзают mfc и не пачкают руки... дельфисты VCL. А куда
Дык вот, товарищ eodor накорябал несколько *.bi'шек для того, чтобы изобразить код WinAPI в читаемом a la RqBasic виде. Скачать их можно по ссылке которую я дал. Код получается (мне) понятный, хотя и не очень компактный. Без неприятных глазу указателей и/или хэндлов. В настоящее время работа не закончена (я лично добавлял кой-какие нюансы в его код, для себя), но пользоваться можно. Бинарник получается небольшой и быстрый, как будто писали на WinAPI (что почти правда).
На сегодня под интерфейс для виндов лучше инструмента я не нашел. Маст хэв.
Только вот что-то мне кажется, что он форумом ошибся - это явно не на FB написано..
увы, увы... это именно FB (он и не такое может,
Re: listbox или какие-нибудь другие простые списки
Ну, чтож, будем внимательно смотреть.
А кто у нас тут писатель? У нас здесь писателей нету!
Вот и писаем в меру своих умений. Э-э-э, простите, батоны топчем!
Всё, что меня особо интересовало, вы указали, за что мой респект. Надеюсь, что я пойму.
Ох нет. Это не winApi, а чёрт знает что!
Окна не совсем стандартные.
Хотя остаётся вероятность, что мои руки кривы...
Ладно, я пробую вернуться к чистому winApi.
А кто у нас тут писатель? У нас здесь писателей нету!
Вот и писаем в меру своих умений. Э-э-э, простите, батоны топчем!
Всё, что меня особо интересовало, вы указали, за что мой респект. Надеюсь, что я пойму.
Ох нет. Это не winApi, а чёрт знает что!
Окна не совсем стандартные.
Хотя остаётся вероятность, что мои руки кривы...
Ладно, я пробую вернуться к чистому winApi.
Re: listbox или какие-нибудь другие простые списки
Сейчас сидел и ковырял разные исходники, от которых у меня голова пухнет.
Как делать менюшки разобрался, приложенный примерчик помог. Надеюсь, об этом скоро появиться глава в нашей книге.
А вот с ListBox, пока не выходит.
Если я правильно понимаю, то список создаёться, как дочернее окно приложения.
А вот дальше мне ещё не понятно, как, например добавлять элементы.
И ведь что-то такое крутится в голове. Кажеться я пару лет назад, уже нечто такое крутил. Вроде бы список, и вроде у меня даже добавлялись элементы.
Но вот ни исходников тех не найду, ни даже вспомнить, что точно это было.
Надо, нам на форуме кладовку завести, чтоб склерозники вроде меня скидывали туда свои наработки, дабы другие и они сами могли этим пользоваться.
Как делать менюшки разобрался, приложенный примерчик помог. Надеюсь, об этом скоро появиться глава в нашей книге.
А вот с ListBox, пока не выходит.
Если я правильно понимаю, то список создаёться, как дочернее окно приложения.
- Код:
listBox1 = CreateWindowEx(&h00000200, "ListBox", "", &h50010000, 520, -8, 96, 79, parent_window, cast(hmenu, IDC_LIST0), instance, null)
А вот дальше мне ещё не понятно, как, например добавлять элементы.
И ведь что-то такое крутится в голове. Кажеться я пару лет назад, уже нечто такое крутил. Вроде бы список, и вроде у меня даже добавлялись элементы.
Но вот ни исходников тех не найду, ни даже вспомнить, что точно это было.
Надо, нам на форуме кладовку завести, чтоб склерозники вроде меня скидывали туда свои наработки, дабы другие и они сами могли этим пользоваться.
Re: listbox или какие-нибудь другие простые списки
Eric-S пишет:
Если я правильно понимаю, то список создаёться, как дочернее окно приложения.Надо, нам на форуме кладовку завести, чтоб склерозники вроде меня скидывали туда свои наработки, дабы другие и они сами могли этим пользоваться.
- Код:
listBox1 = CreateWindowEx(&h00000200, "ListBox", "", &h50010000, 520, -8, 96, 79, parent_window, cast(hmenu, IDC_LIST0), instance, null)
Для складирования подобного <...> кладовку уже придумали - msdn.microsoft.com.
listbox или какие-нибудь другие простые списки
привет. посmотрел я GuiTK и немного офигел. вещь крутая по удобству, но покрайней мере размер бинарника я бы не сказал что он мал. демо программа с радиокнопками занимает 108 кб. да это можно в 7 кб уложить. кнопки не выбираются с клавиатуры пока не активируеш мышкой какую-нибуть кнопку. бл, как меня бесят эти не стандартные окна, я привык работать с клавиатуры, а в наше х время все помешались на новшествах. вот скачал прогу для авторана "EasySoft AutoRun", классная вещь, все настраивается в ini файле, но эти х окна, бесят! не одной кнопки с клавы не выбрать! короче, надо найти русское описание файлов rc, и проблема исчезнет, если вы не ходите делать окна на чистом winapi, тогда можно окошки делать в ресурсах. только я пока не видел описания скриптов rc на русском.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: listbox или какие-нибудь другие простые списки
Дык, FBEdit позволяет визуально rc создавать и редактировать. IMHO, большего и не нужно
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: listbox или какие-нибудь другие простые списки
electrik пишет: кнопки не выбираются с клавиатуры пока не активируеш мышкой какую-нибуть кнопку. бл, как меня бесят эти не стандартные окна, я привык работать с клавиатуры
Позаботились о TabOrder и SetFocus?
listbox или какие-нибудь другие простые списки
justar писал:Дык, FBEdit позволяет визуально rc создавать и редактировать. IMHO, большего и не нужно
да это все круто, но как-то я тут писал, что у меня проблемы со зрением, а эти проги графические, мои говорилки их не берут. даже если помечаешь в jaws графику, после переустановки винды, может поменятся ее номер и вот опять заново прописывай. вот и надо мне описание файлов rc. если разберусь, надо будет написать редактор для незрячих. а кстати на visual basic, можно клепать rc? может поставить шестой vb, да и клепать в нем, а потом на freebasic прогу писать. покрайней мере, там я без проблем работал с окнами, но vb создавал файлы frm, а это совсем другая штука. пойду пороюсь по инету, если чего-нибудь нарою, скину ссылку.
да это все круто, но как-то я тут писал, что у меня проблемы со зрением, а эти проги графические, мои говорилки их не берут. даже если помечаешь в jaws графику, после переустановки винды, может поменятся ее номер и вот опять заново прописывай. вот и надо мне описание файлов rc. если разберусь, надо будет написать редактор для незрячих. а кстати на visual basic, можно клепать rc? может поставить шестой vb, да и клепать в нем, а потом на freebasic прогу писать. покрайней мере, там я без проблем работал с окнами, но vb создавал файлы frm, а это совсем другая штука. пойду пороюсь по инету, если чего-нибудь нарою, скину ссылку.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: listbox или какие-нибудь другие простые списки
еще раз привет. eric, спасибо за ссылку
http://dims.karelia.ru/win32/
все достаточно понятно написано, про окна, ресурсы, будем с удовольствием ковырять. но все-равно, буду искать, или ждать сдесь, ссылки на полное описание файлов rc на русском.
http://dims.karelia.ru/win32/
все достаточно понятно написано, про окна, ресурсы, будем с удовольствием ковырять. но все-равно, буду искать, или ждать сдесь, ссылки на полное описание файлов rc на русском.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: listbox или какие-нибудь другие простые списки
Дык вот, про GuiTK.
Я уже говорил, что комплект недописанный, но опенсорс предполагает, что можно самому добавить. Вот как раз тот случай.
Нарисовали форму, нарисовали элемент, например ListBox. И действительно, получается надо в него мышкой ткнуть, чтобы с клавиатуры заработало. Тут спасет метод SetFocus.
Дописываем в свою прогу:
ListBox.SetFocus
и получаем ошибку. Дело в том, что для TControl такой метод у автора определен, а у его потомков нет. Открываем TListBox.bi и дописываем
в декларации Public:
declare sub setfocus
и в самый конец добавляем процедуру
sub TListBox.SetFocus
Control.SetFocus
end sub
Снова компилируем, ошибок нет, при запуске программы фокус на нашем элементе.
Я уже говорил, что комплект недописанный, но опенсорс предполагает, что можно самому добавить. Вот как раз тот случай.
Нарисовали форму, нарисовали элемент, например ListBox. И действительно, получается надо в него мышкой ткнуть, чтобы с клавиатуры заработало. Тут спасет метод SetFocus.
Дописываем в свою прогу:
ListBox.SetFocus
и получаем ошибку. Дело в том, что для TControl такой метод у автора определен, а у его потомков нет. Открываем TListBox.bi и дописываем
в декларации Public:
declare sub setfocus
и в самый конец добавляем процедуру
sub TListBox.SetFocus
Control.SetFocus
end sub
Снова компилируем, ошибок нет, при запуске программы фокус на нашем элементе.
Re: listbox или какие-нибудь другие простые списки
спасибо, будем пробовать.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: listbox или какие-нибудь другие простые списки
опять, на мой взгляд, полезность на оф форуме:
http://freebasic.net/forum/viewtopic.php?p=109466
'GUI Win32 wrapper sample
http://freebasic.net/forum/viewtopic.php?p=109466
'GUI Win32 wrapper sample
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: listbox или какие-нибудь другие простые списки
Да, оффорум, полезен.
http://www.freebasic.net/forum/viewtopic.php?t=7627&highlight=listbox
В этой теме. Во втором посте примерчик. Сразу заработал.
Попробую с ним разобраться конкретнее.
Всё же winApi напрямую лучше, чем всякие оболочки. К сожалению понятной инфы по нему маловато.
http://www.freebasic.net/forum/viewtopic.php?t=7627&highlight=listbox
В этой теме. Во втором посте примерчик. Сразу заработал.
Попробую с ним разобраться конкретнее.
Всё же winApi напрямую лучше, чем всякие оболочки. К сожалению понятной инфы по нему маловато.
- Код:
#include "windows.bi"
#define LBADDS(h,s)SendMessage(h,LB_ADDSTRING,0,cast(LPARAM,@s))
Function ListBox( Byval hParent As HWND, _
Byval x As Integer, _
Byval y As Integer, _
Byval w As Integer, _
Byval h As Integer, _
Byval cid As Integer, _
Byval extraStyle As Integer = 0 ) As HWND
Dim style As Integer = WS_CHILD Or _
WS_VISIBLE Or _
WS_TABSTOP Or _
WS_BORDER Or _
WS_VSCROLL Or _
LBS_HASSTRINGS Or _
LBS_NOINTEGRALHEIGHT Or _
LBS_DISABLENOSCROLL Or _
extraStyle
Return CreateWindowEx( WS_EX_CLIENTEDGE, _
"LISTBOX", _
0, _
style, _
x, y, w, h, _
hParent, _
cast( HMENU, cid ), _
GetModuleHandle( null ), _
null )
End Function
Function WindowProc( Byval hWnd As HWND,_
Byval uMsg As uint,_
Byval wParam As WPARAM,_
Byval lParam As LPARAM ) As LRESULT
Static As HWND hList
Dim As Integer curSel
Select Case uMsg
Case WM_CREATE
hList = ListBox( hWnd, 10, 10, 290, 180, 100, LBS_NOTIFY )
LBADDS( hList, "string 0" )
LBADDS( hList, "string 1" )
LBADDS( hList, "string 2" )
LBADDS( hList, "string 3" )
LBADDS( hList, "string 4" )
LBADDS( hList, "string 5" )
LBADDS( hList, "string 6" )
LBADDS( hList, "string 7" )
LBADDS( hList, "string 8" )
LBADDS( hList, "string 9" )
SetFocus(hList)
SendMessage( hList, LB_SETCURSEL, 0, 0 )
Case WM_COMMAND
If lParam = hList Then
If hiword(wParam) = LBN_SELCHANGE Then
curSel = SendMessage( hList, LB_GETCURSEL, 0, 0 )
Print curSel
End If
End If
Case WM_CLOSE
PostQuitMessage( null )
Case Else
Return DefWindowProc( hWnd, uMsg, wParam, lParam )
End Select
Return 0
End Function
'' начало
Dim hWnd As HWND
Dim wMsg As MSG
Dim As Integer wx, wy, nWidth, nHeight
Dim wcx As WNDCLASSEX
Dim className As String = "listbox_test_class"
With wcx
.cbSize = sizeof( WNDCLASSEX )
.style = CS_HREDRAW Or CS_VREDRAW Or CS_BYTEALIGNWINDOW
.lpfnWndProc = cast( WNDPROC, @WindowProc )
.cbClsExtra = null
.cbWndExtra = null
.hInstance = GetModuleHandle( null )
.hbrBackground = cast( HBRUSH,COLOR_WINDOW + 1 )
.lpszMenuName = null
.lpszClassName = Strptr( className )
.hIcon = LoadIcon( null, IDI_APPLICATION )
.hCursor = LoadCursor ( null, IDC_ARROW )
.hIconSm = 0
End With
RegisterClassEx( @wcx )
nWidth = 320
nHeight = 240
wx = (GetSystemMetrics( SM_CXSCREEN ) / 2) - nWidth / 2
wy = (GetSystemMetrics( SM_CYSCREEN ) / 2) - nHeight / 2
hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW,_
Strptr( className ),_
"Test",_
WS_OVERLAPPEDWINDOW,_
wx, wy, nWidth, nHeight,_
null, null,_
GetModuleHandle( null ), null )
ShowWindow( hWnd, SW_SHOWNORMAL )
'UpdateWindow( hWnd )
Do Until( GetMessage( @wMsg, null, 0, 0 ) = 0 )
TranslateMessage( @wMsg )
DispatchMessage( @wMsg )
Loop
Re: listbox или какие-нибудь другие простые списки
ну да, win api несомненно лучше, но многие предлагаемые тут оболочки, тоже написаны на нем, просто немного наворочено, а так если разобраться с исходниками, то можно творить вещи. если не критичен размер бинарника, так можно пользовать GuiTK.
лично я так думаю, лучше всего пользовать ресурсы, просто и быстро.
лично я так думаю, лучше всего пользовать ресурсы, просто и быстро.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|