Конференция "KOL" » снова TrackBar [Delphi, Windows]
 
  • Robt (26.06.07 19:28) [0]
    а как работать с "тиками" ?
    менять растояние между ними
    типа frequency в vcl
    и как вариант фиксированое "прыганье" ползунка
    по "тикам"
  • Vladimir Kladov (26.06.07 19:46) [1]
    Как в VCL - не знаю. В исходник KOLTrackbar'а посмотрите. Там есть все, что предоставляет API для тракбара.
  • robt (27.06.07 14:01) [2]
    а как определить изменение позиции то? :(
    OnChange как в VCL нету не через события же мыши и клавы определять ?
  • =BuckLr= (27.06.07 15:50) [3]

    > не через события же мыши и клавы определять ?

    А почему бы и нет?
  • robt (27.06.07 16:06) [4]
    патаму что быть такого не может
    чтобы системный контрол не посылал
    уведомлений о изменении своего основного параметра
  • Vladimir Kladov (27.06.07 16:37) [5]
    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.




    Других нотификаций для тракбара нет.
  • Galkov © (27.06.07 20:30) [6]
    А мой 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

  • Vladimir Kladov (27.06.07 22:26) [7]
    Ну так это отрабатывается в OnScroll.
  • robt (28.06.07 10:53) [8]
    фишка вся в том что OnScroll кокраз и не срабатывает вабще :(
    хоть чо с ним делай например :

    procedure TForm1.TrackBar1Scroll(Sender: PTrackbar; Code: Integer);
    begin
    inc(i);
    form.Caption:=int2str(i);
    end;
  • Vladimir Kladov (28.06.07 15:28) [9]
    Если только вы программно присваиваете Position, то да, не сработает. Так сами и обработайте, что присвоили.
  • robt (28.06.07 16:20) [10]
    дело в том что програмно ничо не присваеваеца

    это тупо форма+тракбар+
    procedure TForm1.TrackBar1Scroll(Sender: PTrackbar; Code: Integer);
    begin
    inc(i);
    form.Caption:=int2str(i);
    end;

    и все!
    никакой реакции ни на мышь ни на клаву хоть куда тыкай
  • robt (28.06.07 16:24) [11]
    с mhtrackbar такаяже ситуация
  • Vladimir Kladov (28.06.07 18:44) [12]
    А у меня работатет. Код:
    procedure TForm1.TrackBar1Scroll(Sender: PTrackbar; Code: Integer);
    begin
     Form.Caption := Int2Str(Sender.Position);
    end;

  • Galkov © (28.06.07 19:45) [13]
    На своем форуме я обычно добавляю:

    Вопрос: что я делаю не так ???

    :))
  • mdw © (28.06.07 20:18) [14]

    > А у меня работатет. Код:

    Специально проверил сейчас, у меня тоже работает.
  • Robt (13.09.07 21:22) [15]

    > А у меня работатет. Код:
    > 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;

    коректно работает тока в пустом проекте
    кол последний

    чо делать ?
  • robt (14.09.07 09:54) [16]
    на работе пустой проект с темже кодом (Form.Caption := Int2Str(Sender.Position);)
    ВОБЩЕ не работает !!! хотя 2 мес. назад работал....
    кол 2.37

    по моему где то косяк тракбара с обработкой сообщений
    веть даже если у меня ошибка в программе (чего не может быть в принципе в "пустом" проекте)
    даже в этом случае это не должно влиять на внупренние процессы в тракбаре .
  • Vladimir Kladov (14.09.07 14:10) [17]
    Проверьте, что вы не используете в своем приложении сообщений WM_USER, пересекающихся с сообщениями trackbar'а.
  • robt (14.09.07 16:06) [18]
    использую WM_USER+101 и выше это где вылетает с переполнением,
    а "пустой" проект для теста это тупо форма+тракбар и фсе...
  • robt (14.09.07 16:13) [19]
    и кроме того VCL версия тоже использует WM_USER но проблем не возникает
    а тут то Range error то ноль эмоций

    забыл сказать, когда onScroll пустой Range error нету, тока чонить написал-капец
 
Конференция "KOL" » снова TrackBar [Delphi, Windows]
Есть новые Нет новых   [134431   +11][b:0][p:0.002]