-
а как работать с "тиками" ?
менять растояние между ними
типа frequency в vcl
и как вариант фиксированое "прыганье" ползунка
по "тикам"
-
Как в VCL - не знаю. В исходник KOLTrackbar'а посмотрите. Там есть все, что предоставляет API для тракбара.
-
а как определить изменение позиции то? :(
OnChange как в VCL нету не через события же мыши и клавы определять ?
-
> не через события же мыши и клавы определять ?
А почему бы и нет?
-
патаму что быть такого не может
чтобы системный контрол не посылал
уведомлений о изменении своего основного параметра
-
MSDN:
Notifications
NM_CUSTOMDRAW (trackbar)
Sent by a trackbar control to notify its parent windows about drawing operations. This notification is sent in the form of a WM_NOTIFY message.
NM_RELEASEDCAPTURE (trackbar)
Notifies a trackbar control's parent window that the control is releasing mouse capture. This notification is sent in the form of a WM_NOTIFY message.
Других нотификаций для тракбара нет.
-
А мой MSDN пишет примерно такое:
Trackbar Notification Messages
A trackbar notifies its parent window of user actions by sending the parent a WM_HSCROLL or WM_VSCROLL message. A trackbar with the TBS_HORZ style sends WM_HSCROLL messages. A trackbar with the TBS_VERT style sends WM_VSCROLL messages. The low-order word of the wParam parameter of WM_HSCROLL or WM_VSCROLL contains the notification code. For the TB_THUMBPOSITION and TB_THUMBTRACK notifications, the high-order word of the wParam parameter specifies the position of the slider. For all other notifications, the high-order word is zero; send the TBM_GETPOS message to determine the slider position. The lParam parameter is the handle to the trackbar.
The system sends the TB_BOTTOM, TB_LINEDOWN, TB_LINEUP, and TB_TOP notification messages only when the user interacts with a trackbar by using the keyboard. The TB_THUMBPOSITION and TB_THUMBTRACK notification messages are only sent when the user is using the mouse. The TB_ENDTRACK, TB_PAGEDOWN, and TB_PAGEUP notification messages are sent in both cases. The following table lists the trackbar notification messages and the events (virtual key codes or mouse events) that cause the notifications to be sent.
Notification message Reason sent
TB_BOTTOM VK_END
TB_ENDTRACK WM_KEYUP(the user released a key that sent a relevant virtual key code)
TB_LINEDOWN VK_RIGHT or VK_DOWN
TB_LINEUP VK_LEFT or VK_UP
TB_PAGEDOWN VK_NEXT (the user clicked the channel below or to the right of the slider)
TB_PAGEUP VK_PRIOR (the user clicked the channel above or to the left of the slider)
TB_THUMBPOSITION WM_LBUTTONUP following a TB_THUMBTRACK notification message
TB_THUMBTRACK Slider movement (the user dragged the slider)
TB_TOP VK_HOME
-
Ну так это отрабатывается в OnScroll.
-
фишка вся в том что OnScroll кокраз и не срабатывает вабще :(
хоть чо с ним делай например :
procedure TForm1.TrackBar1Scroll(Sender: PTrackbar; Code: Integer);
begin
inc(i);
form.Caption:=int2str(i);
end;
-
Если только вы программно присваиваете Position, то да, не сработает. Так сами и обработайте, что присвоили.
-
дело в том что програмно ничо не присваеваеца
это тупо форма+тракбар+
procedure TForm1.TrackBar1Scroll(Sender: PTrackbar; Code: Integer);
begin
inc(i);
form.Caption:=int2str(i);
end;
и все!
никакой реакции ни на мышь ни на клаву хоть куда тыкай
-
с mhtrackbar такаяже ситуация
-
А у меня работатет. Код:
procedure TForm1.TrackBar1Scroll(Sender: PTrackbar; Code: Integer);
begin
Form.Caption := Int2Str(Sender.Position);
end;
-
На своем форуме я обычно добавляю:
Вопрос: что я делаю не так ???
:))
-
> А у меня работатет. Код:
Специально проверил сейчас, у меня тоже работает.
-
> А у меня работатет. Код:
> procedure TForm1.TrackBar1Scroll(Sender: PTrackbar; Code:
> Integer);
> begin
> Form.Caption := Int2Str(Sender.Position);
> end;
вылетает при любом упоминании Position с переполнением диапазона
function TTrackbar.GetVal( const Index: Integer ): Integer;
begin
Result := Perform( WM_USER + ( HiWord( Index ) and $7FFF ), 0, 0 );
end;
коректно работает тока в пустом проекте
кол последний
чо делать ?
-
на работе пустой проект с темже кодом (Form.Caption := Int2Str(Sender.Position);)
ВОБЩЕ не работает !!! хотя 2 мес. назад работал....
кол 2.37
по моему где то косяк тракбара с обработкой сообщений
веть даже если у меня ошибка в программе (чего не может быть в принципе в "пустом" проекте)
даже в этом случае это не должно влиять на внупренние процессы в тракбаре .
-
Проверьте, что вы не используете в своем приложении сообщений WM_USER, пересекающихся с сообщениями trackbar'а.
-
использую WM_USER+101 и выше это где вылетает с переполнением,
а "пустой" проект для теста это тупо форма+тракбар и фсе...
-
и кроме того VCL версия тоже использует WM_USER но проблем не возникает
а тут то Range error то ноль эмоций
забыл сказать, когда onScroll пустой Range error нету, тока чонить написал-капец