Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2009, 01:52   #1
kopoba
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 18
По умолчанию Scroll в ListBox

Подскажите, пожалуйста, как ограничить количество показываемых записей в ListBox, а остальные показывать с использованием вертикального скролла?
kopoba вне форума Ответить с цитированием
Старый 06.06.2009, 02:19   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Установить высоту ListBox'у или установить шрифт текста в ListBox'е.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 06.06.2009, 02:22   #3
kopoba
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 18
По умолчанию

А дело в том, что высота листбокса вычисляется в зависимости от количества возвращяемых из запроса строк. Надо, например, чтобы если кол-во таких строк >5, то отобразить прокрутку, иначе вывести как есть.
kopoba вне форума Ответить с цитированием
Старый 06.06.2009, 02:31   #4
kopoba
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 18
По умолчанию

Это сделал уже)
Теперь надо, чтобы по нажатию бэкспейс в эдите, листбокс пропадал на 2 секунды, а потом в нем отображались записи на момент истечения этих 2 секунд, потому что из-за перерисовки он сильно мигает.
kopoba вне форума Ответить с цитированием
Старый 06.06.2009, 02:34   #5
kopoba
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 18
По умолчанию

А еще как сделать, чтобы листбокс реагировал на нажатие клавиш стрелка вверх-вниз, даже когда фокус на эдите?
kopoba вне форума Ответить с цитированием
Старый 06.06.2009, 02:36   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Теперь надо, чтобы по нажатию бэкспейс в эдите, листбокс пропадал на 2 секунды, а потом в нем отображались записи на момент истечения этих 2 секунд
Код:
Procedure TForm1.Edit1KeyDown(Sender: TObject; Var Key: Word;
Shift: TShiftState);
Begin
If Key=8 Then
Begin
ListBox1.Visible:=False;
Sleep(2000);
ListBox1.Visible:=True;
End;
End;
Если Sleep(2000); не устроит, то можно использовать задержку Delay.
Цитата:
А еще как сделать, чтобы листбокс реагировал на нажатие клавиш стрелка вверх-вниз, даже когда фокус на эдите?
Код:
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Form1.KeyPreview:=True;
End;
Procedure TForm1.FormKeyDown(Sender: TObject; Var Key: Word;
Shift: TShiftState);
Begin
If Key=38 Then
Begin
SendMessage(ListBox1.Handle,LB_SETCURSEL,ListBox1.ItemIndex-1, 0);
End;
If Key=40 Then
Begin
SendMessage(ListBox1.Handle,LB_SETCURSEL,ListBox1.ItemIndex+1, 0);
End;
End;
Если надо именно дял Edit, то проверяйте в нём клавиши.
Всегда рад помочь!

Последний раз редактировалось Terran; 06.06.2009 в 02:51.
Terran вне форума Ответить с цитированием
Старый 06.06.2009, 02:56   #7
kopoba
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 18
По умолчанию

Цитата:
Если Sleep(2000); не устроит, то можно использовать задержку Delay.
Если так сделать, то виснут сразу и листбокс и эдит, а надо, чтобы листбокс пропадал и не мелькал, а в эдите спокойно можно было набирать или редактировать что-нибудь. Я пробовал ставить таймер, но он на 2 секунды листбокс отключает, а через 2 снова прорисовывает, независимо от того, продолжаю я редактировать эдит или нет.
Надо, чтобы если я нажал бэкспейс, таймер отключил листбокс, если за эти 2 секунды опять нажал бэкспейс - таймер по новой начинает отсчитывать 2 секунды. Вот.
kopoba вне форума Ответить с цитированием
Старый 06.06.2009, 03:04   #8
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Надо, чтобы если я нажал бэкспейс, таймер отключил листбокс, если за эти 2 секунды опять нажал бэкспейс - таймер по новой начинает отсчитывать 2 секунды.
Возьмите код с поста №6 и вместо Sleep напишите Delay. Эффект будет такой.
Описание Delay.
Код:
Procedure Delay(Ms: Longint);
Var
TheTime: LongInt;
Begin
TheTime:=GetTickCount + Ms;
While GetTickCount < TheTime Do
Application.ProcessMessages;
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 06.06.2009, 03:41   #9
kopoba
Пользователь
 
Регистрация: 01.06.2009
Сообщений: 18
По умолчанию

Все работает. Спасибо громадное. Я напишу вас в списке литературы к курсовику.
kopoba вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как добавить в listbox файлы(пишу с помощью bassplayer)(Listbox+opendialog=play) blackstersl Общие вопросы Delphi 11 09.06.2010 13:23
Отключить Scroll valerij Microsoft Office Excel 2 14.05.2009 02:39
Scroll на форме MasterofCDM Общие вопросы Delphi 5 24.02.2009 16:18
Вопрос по scroll-ам blackstersl Общие вопросы Delphi 1 28.12.2008 20:43
scroll в webbrouser MaslCS Компоненты Delphi 4 23.01.2008 22:58