listbox или какие-нибудь другие простые списки

Предыдущая тема Следующая тема Перейти вниз

listbox или какие-нибудь другие простые списки

Сообщение  Eric-S в Вс Сен 28, 2008 1:50 am

Друзья! Меня вчера немного озадачили вопросом.
Ну а я решил перевести стрелки на форум.

Нужно создать окно, в нём список элементов, которые можно активировать кликом или enterom.
Вот собственно и всё!

У кого-нибудь есть простой исходник такой проги?

А, да. Нужно winApi. И без внешних библиотек.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  Замабувараев в Пн Сен 29, 2008 6:51 am

Ага. Погоди, покопаюсь, кое-что найду и выложу как пример в онлайн книгу.
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 34
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  Eric-S в Пн Сен 29, 2008 8:01 am

Жду с нетерпением. Буду благодарен!

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  DoReMi в Пн Сен 29, 2008 10:30 am

с использованием 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
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  Eric-S в Пн Сен 29, 2008 8:56 pm

DoReMi, а не могли бы вы поподробнее рассказать об этом, например в теме Интерфейсная библиотека

Что это такое, как работает.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  justar в Пн Сен 29, 2008 9:23 pm

Только вот что-то мне кажется, что он форумом ошибся - это явно не на FB написано... Wink

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  DoReMi в Пн Сен 29, 2008 10:52 pm

Eric-S пишет:DoReMi, а не могли бы вы поподробнее рассказать об этом, например в теме Интерфейсная библиотека

Что это такое, как работает.

Да не могу я подробнее ) не пейсатель.
Коротко могу -
Однажды, давным-давно, в далекой Румынии родился программер... <...>
Вобчем WinAPI вы наверное знаете. Какой это геморрой на ём рисовать интерфейс. То есть познакомиться с ним конечно можно, но чисто для академического интереса. Сишники к примеру юзают mfc и не пачкают руки... дельфисты VCL. А куда крестьянину прогеру ФБ податься? Приходится пользовать винапи. Ну, конечно можно юзать VISG, но код-то всё равно плохо читаем потом.
Дык вот, товарищ eodor накорябал несколько *.bi'шек для того, чтобы изобразить код WinAPI в читаемом a la RqBasic виде. Скачать их можно по ссылке которую я дал. Код получается (мне) понятный, хотя и не очень компактный. Без неприятных глазу указателей и/или хэндлов. В настоящее время работа не закончена (я лично добавлял кой-какие нюансы в его код, для себя), но пользоваться можно. Бинарник получается небольшой и быстрый, как будто писали на WinAPI (что почти правда).
На сегодня под интерфейс для виндов лучше инструмента я не нашел. Маст хэв.

Только вот что-то мне кажется, что он форумом ошибся - это явно не на FB написано..

увы, увы... это именно FB (он и не такое может, он и микробов убивает, рулеззз)
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  Eric-S в Пн Сен 29, 2008 11:21 pm

Ну, чтож, будем внимательно смотреть.

А кто у нас тут писатель? У нас здесь писателей нету!
Вот и писаем в меру своих умений. Э-э-э, простите, батоны топчем!

Всё, что меня особо интересовало, вы указали, за что мой респект. Надеюсь, что я пойму.

Ох нет. Это не winApi, а чёрт знает что!
Окна не совсем стандартные.
Хотя остаётся вероятность, что мои руки кривы...
Ладно, я пробую вернуться к чистому winApi.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  Eric-S в Чт Окт 02, 2008 6:28 am

Сейчас сидел и ковырял разные исходники, от которых у меня голова пухнет.
Как делать менюшки разобрался, приложенный примерчик помог. Надеюсь, об этом скоро появиться глава в нашей книге.

А вот с ListBox, пока не выходит.

Если я правильно понимаю, то список создаёться, как дочернее окно приложения.
Код:

   listBox1 = CreateWindowEx(&h00000200, "ListBox", "", &h50010000, 520, -8, 96, 79, parent_window, cast(hmenu, IDC_LIST0), instance, null)

А вот дальше мне ещё не понятно, как, например добавлять элементы.


И ведь что-то такое крутится в голове. Кажеться я пару лет назад, уже нечто такое крутил. Вроде бы список, и вроде у меня даже добавлялись элементы.
Но вот ни исходников тех не найду, ни даже вспомнить, что точно это было.

Надо, нам на форуме кладовку завести, чтоб склерозники вроде меня скидывали туда свои наработки, дабы другие и они сами могли этим пользоваться.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  DoReMi в Чт Окт 02, 2008 10:32 pm

Eric-S пишет:
Если я правильно понимаю, то список создаёться, как дочернее окно приложения.
Код:

   listBox1 = CreateWindowEx(&h00000200, "ListBox", "", &h50010000, 520, -8, 96, 79, parent_window, cast(hmenu, IDC_LIST0), instance, null)
Надо, нам на форуме кладовку завести, чтоб склерозники вроде меня скидывали туда свои наработки, дабы другие и они сами могли этим пользоваться.

Для складирования подобного <...> кладовку уже придумали - msdn.microsoft.com.
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  Eric-S в Чт Окт 02, 2008 10:34 pm

Мало того, что на английском, но и не freebasic.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

listbox или какие-нибудь другие простые списки

Сообщение  electrik в Сб Окт 04, 2008 3:53 pm

привет. посmотрел я GuiTK и немного офигел. вещь крутая по удобству, но покрайней мере размер бинарника я бы не сказал что он мал. демо программа с радиокнопками занимает 108 кб. да это можно в 7 кб уложить. кнопки не выбираются с клавиатуры пока не активируеш мышкой какую-нибуть кнопку. бл, как меня бесят эти не стандартные окна, я привык работать с клавиатуры, а в наше х время все помешались на новшествах. вот скачал прогу для авторана "EasySoft AutoRun", классная вещь, все настраивается в ini файле, но эти х окна, бесят! не одной кнопки с клавы не выбрать! короче, надо найти русское описание файлов rc, и проблема исчезнет, если вы не ходите делать окна на чистом winapi, тогда можно окошки делать в ресурсах. только я пока не видел описания скриптов rc на русском.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  justar в Сб Окт 04, 2008 7:47 pm

Дык, FBEdit позволяет визуально rc создавать и редактировать. IMHO, большего и не нужно

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  DoReMi в Сб Окт 04, 2008 11:26 pm

electrik пишет: кнопки не выбираются с клавиатуры пока не активируеш мышкой какую-нибуть кнопку. бл, как меня бесят эти не стандартные окна, я привык работать с клавиатуры

Позаботились о TabOrder и SetFocus?
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

listbox или какие-нибудь другие простые списки

Сообщение  electrik в Вс Окт 05, 2008 10:54 am

justar писал:Дык, FBEdit позволяет визуально rc создавать и редактировать. IMHO, большего и не нужно

да это все круто, но как-то я тут писал, что у меня проблемы со зрением, а эти проги графические, мои говорилки их не берут. даже если помечаешь в jaws графику, после переустановки винды, может поменятся ее номер и вот опять заново прописывай. вот и надо мне описание файлов rc. если разберусь, надо будет написать редактор для незрячих. а кстати на visual basic, можно клепать rc? может поставить шестой vb, да и клепать в нем, а потом на freebasic прогу писать. покрайней мере, там я без проблем работал с окнами, но vb создавал файлы frm, а это совсем другая штука. пойду пороюсь по инету, если чего-нибудь нарою, скину ссылку.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  electrik в Вс Окт 05, 2008 6:15 pm

еще раз привет. eric, спасибо за ссылку
http://dims.karelia.ru/win32/
все достаточно понятно написано, про окна, ресурсы, будем с удовольствием ковырять. но все-равно, буду искать, или ждать сдесь, ссылки на полное описание файлов rc на русском.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  DoReMi в Пн Окт 06, 2008 10:09 am

Дык вот, про GuiTK.
Я уже говорил, что комплект недописанный, но опенсорс предполагает, что можно самому добавить. Вот как раз тот случай.
Нарисовали форму, нарисовали элемент, например ListBox. И действительно, получается надо в него мышкой ткнуть, чтобы с клавиатуры заработало. Тут спасет метод SetFocus.
Дописываем в свою прогу:
ListBox.SetFocus
и получаем ошибку. Дело в том, что для TControl такой метод у автора определен, а у его потомков нет. Открываем TListBox.bi и дописываем
в декларации Public:
declare sub setfocus
и в самый конец добавляем процедуру
sub TListBox.SetFocus
Control.SetFocus
end sub

Снова компилируем, ошибок нет, при запуске программы фокус на нашем элементе.
avatar
DoReMi

Сообщения : 67
Дата регистрации : 2008-08-28
Возраст : 44
Откуда : Волгодонск

Посмотреть профиль http://doreonline.blogspot.com

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  electrik в Вт Окт 07, 2008 8:41 pm

спасибо, будем пробовать.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  electrik в Чт Окт 30, 2008 7:35 pm

опять, на мой взгляд, полезность на оф форуме:
http://freebasic.net/forum/viewtopic.php?p=109466
'GUI Win32 wrapper sample

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  Eric-S в Ср Дек 24, 2008 7:25 pm

Да, оффорум, полезен.
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

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  electrik в Ср Дек 24, 2008 8:15 pm

ну да, win api несомненно лучше, но многие предлагаемые тут оболочки, тоже написаны на нем, просто немного наворочено, а так если разобраться с исходниками, то можно творить вещи. если не критичен размер бинарника, так можно пользовать GuiTK.
лично я так думаю, лучше всего пользовать ресурсы, просто и быстро.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: listbox или какие-нибудь другие простые списки

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения