Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Listbox, вопрос..
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - Система
CrazyJohn
Значит, стоит задача разработать программу с меню на основе функции ListBox. Проблема в том, что я не догоняю как заставить программу реагировать на выбор в меню какого-либо пункта. Поэтому прошу помощи гуру программирования.

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

Желательно хороший пример. Заранее спасибо за помощь.
Morpheus
ну обабатывайте OnClick у ListBox... это если надо обработать выбор какого либо элемента в лист боксе. А то я не совсем понял при чем тут меню?

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

procedure TForm1.ListBox1Click(Sender: TObject);
begin
    ShowMessage( ListBox1.Items.Strings[ ListBox1.itemindex ]   );
end;
Und3rground
Если я правильно понял, то ListBox должно служить меню, и в зависимости от нажатия на поле listBox, програма должна выполнять действие.

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

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;


Если я неправильно понял условие, прошу извинить. smile.gif
Morpheus
Для: Und3rground
Минус Вашего примера в том что он статический ( для каждой строки надо писать обработчик ).сматрите мой пример выше
и вообще в таком перечислении лучше использовать ( раз уж на то пошло ) CASE - удобнее будет
Und3rground
Цитата(Morpheus @ 11:01:2008, 17:15 ) *
Для: Und3rground
Минус Вашего примера в том что он статический ( для каждой строки надо писать обработчик ).сматрите мой пример выше
и вообще в таком перечислении лучше использовать ( раз уж на то пошло ) CASE - удобнее будет


Да, с этим согласен. Но кто мешает заменить статические значения. smile.gif Суть примера показать работу, а статика для этого отлично подходит. (поэтому и case не использовал)
CrazyJohn
Забыл указать, что прога пишется полностью на Win API функциях. Поэтому использование компонентов исключено. Но всё равно всем спасибо. Нашёл решение, использовал case of.

Если кому-то интересно, то могу выложить код.
sax_ol
Цитата(CrazyJohn @ 11:01:2008, 17:39 )
Если кому-то интересно, то могу выложить код.

Всем интрересно.

А еще интересно, что такое ListBox?
CrazyJohn
Как-то так...

 
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, вы издеваетесь или правда не знаете?
sax_ol
Для: CrazyJohn
Почему издеваюсь? я не телепат, чтоб не глядя понять, что это такое ....
CrazyJohn
Ну это стандартная функция вообще-то, чо на неё глядеть-то? smile.gif Рисует окошко со строками. При клике мышкой по строке, она выделяется.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.