Listbox, вопрос..

Тема в разделе "Delphi - Система", создана пользователем CrazyJohn, 7 янв 2008.

  1. CrazyJohn

    CrazyJohn New Member

    Регистрация:
    7 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Значит, стоит задача разработать программу с меню на основе функции ListBox. Проблема в том, что я не догоняю как заставить программу реагировать на выбор в меню какого-либо пункта. Поэтому прошу помощи гуру программирования.

    И ещё. Я так понимаю, что нужно вывести значение выбранного пункта в какую-либо переменную, в зависимости от которой прога будет выполнять желаемые действия. Но тут опять вопрос: как сделать так, чтобы прога реагировала на выбор пункта в меню на лету? То есть выбрали пункт и программа тут же делает действие, связанное с этим пунктом.

    Желательно хороший пример. Заранее спасибо за помощь.
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    ну обабатывайте OnClick у ListBox... это если надо обработать выбор какого либо элемента в лист боксе. А то я не совсем понял при чем тут меню?

    просто пример

    Код (Text):
    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
    ShowMessage( ListBox1.Items.Strings[ ListBox1.itemindex ]  );
    end;
     
  3. Und3rground

    Und3rground Гость

    Если я правильно понял, то ListBox должно служить меню, и в зависимости от нажатия на поле listBox, програма должна выполнять действие.

    Вот пример обработчика нажатия мышкой на поле в ListBox.

    Код (Text):
    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
    if (ListBox1.ItemIndex = 0) then begin // "кликнули" на первую строку
    if ListBox1.Items.Strings[0] = '1' then begin
    ShowMessage('Value on 1st string = 1'); // если текст первой строки "1"
    end else ShowMessage('Hello, First string!');
    end;

    if (ListBox1.ItemIndex = 1) then begin // "кликнули" на 2-ю строку
    ListBox1.Items.Strings[1] := 'SecondString';
    ShowMessage('Hello, secondString!');
    end;
    end;
    Если я неправильно понял условие, прошу извинить. :D
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Und3rground
    Минус Вашего примера в том что он статический ( для каждой строки надо писать обработчик ).сматрите мой пример выше
    и вообще в таком перечислении лучше использовать ( раз уж на то пошло ) CASE - удобнее будет
     
  5. Und3rground

    Und3rground Гость

    Да, с этим согласен. Но кто мешает заменить статические значения. :D Суть примера показать работу, а статика для этого отлично подходит. (поэтому и case не использовал)
     
  6. CrazyJohn

    CrazyJohn New Member

    Регистрация:
    7 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Забыл указать, что прога пишется полностью на Win API функциях. Поэтому использование компонентов исключено. Но всё равно всем спасибо. Нашёл решение, использовал case of.

    Если кому-то интересно, то могу выложить код.
     
  7. CrazyJohn

    CrazyJohn New Member

    Регистрация:
    7 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Как-то так...

    Код (Text):
     
    const
    listbox_0=10000;
    .
    .
    .
    var
    listbox: array[0..2] of hwnd;
    .
    .
    .
    function WindowProc(wnd:HWND; Msg : Integer; Wparam:integer; Lparam:integer):Lresult;
    stdcall;
    var
    p: PChar;
    n: integer;
    s:pchar;

    Begin
    case msg of
    wm_destroy:

    Begin
    postquitmessage(0); exit;
    Result:=0;
    End;
    WM_COMMAND:
    case LoWord( wParam ) of

    listbox_0:
    case HiWord( wParam ) of
    LBN_DBLCLK: begin
    n:=sendmessage(listbox[0],LB_GETCARETINDEX,0,0);
    if n=0 then begin

    end;
    end;
    end;



    end;


    else Result:=DefWindowProc(wnd,msg,wparam,lparam);
    end;


    End;
    .
    .
    .
    listbox[0] := CreateWindowEx( WS_EX_STATICEDGE, 'listbox', '', WS_VISIBLE or WS_CHILD or LBS_NOTIFY or WS_VSCROLL or WS_BORDER,
    550, 265, 140, 100, EVGwnd, listbox_0, hInstance, nil );
    sax_ol, вы издеваетесь или правда не знаете?
     
  8. CrazyJohn

    CrazyJohn New Member

    Регистрация:
    7 янв 2008
    Сообщения:
    4
    Симпатии:
    0
    Ну это стандартная функция вообще-то, чо на неё глядеть-то? :) Рисует окошко со строками. При клике мышкой по строке, она выделяется.
     
Загрузка...
Похожие Темы - Listbox вопрос
  1. Serduko
    Ответов:
    2
    Просмотров:
    840
  2. radivill
    Ответов:
    0
    Просмотров:
    1.275
  3. virtpro
    Ответов:
    1
    Просмотров:
    1.279
  4. jorjva
    Ответов:
    7
    Просмотров:
    2.591
  5. KingGLEB
    Ответов:
    3
    Просмотров:
    1.318

Поделиться этой страницей