![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ListBox
Ser_Kham1 © (2001-12-25 12:08:00)Добрый день мастера.
У меня два ListBoxa. Между их Itemaми взаимнооднозначное соответствие.
Вы мне не подскажите, можно ли как-нибудь сделать так, чтобы эти два ListBoxа можно было бы вместе прокручивать.
С уважением Ser_Kham
Ser_Kham1 (2001-12-25 15:45:00) [1]Здорово!
Спасибо.
Ser_Kham
Alx2 (2001-12-25 15:39:00) [2]Попробовал. С WindowProc что-то много возни получается :((
Но родился вот такой вариант:
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
// Здесь хорошо бы, кроме адресата, еще и тип сообщения проверить...
if msg.hwnd = ListBox1.Handle then
ListBox2.TopIndex := ListBox1.TopIndex
else
if msg.hwnd = ListBox2.Handle then
ListBox1.TopIndex := ListBox2.TopIndex;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
end;
Alx2 (2001-12-25 13:26:00) [3]Хм... Как бы я не стал делать - обрабатывать сообщение Idle и в нем вызывать присвоение TopIndexов (или по таймеру - но это еще хуже).
А сейчас пока попробую покопаться в листбоксовском WindowProc (так, для общего случая).
Builder (2001-12-25 13:25:00) [4]Вопрос данный пробегал раньше. Итог таков:
1. Я делал с помошью таймера - мне понравилось - прикольное небольшое отставание :)
2. Предлагалось отлавливать событие онСкролл и так сравнивать.
Чем кончилось - не помню :)
Ser_Kham1 (2001-12-25 13:17:00) [5]А как быть, если захочется покручивать ListBox с помощью линейки прокрутки?
Ser_Kham
Alx2 (2001-12-25 12:53:00) [6]Первое, что пришло в голову:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
if ListBox2<>Sender then
ListBox2.TopIndex := ListBox1.TopIndex
else
ListBox1.TopIndex := ListBox2.TopIndex
end;
<\code>
Соответственно, нужно выполнить условие:
ListBox1.OnClick=ListBox2.OnClick=ListBox1Click