Форум: "Основная";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
ВнизTrackBar, реагирующий на нажатия в своей области. Найти похожие ветки
← →
Dismember © (2007-03-24 08:40) [0]Добрый день. Как сделать так, чтобы при клике в некоторую позицию полоски трэкбара можно было отслеживать эту позицию и перемещать ползунок в нужное место? Стандартный компонент Delphi смещает ползунок на 2 позиции в нужную сторону, но хотелось бы реализации типа как в мультимедиа проигрывателях. Посмотрел компоненты LMDTools (точно так же смещается на 2 позиции :() и XiTrackBar (компонент красивый, но на клики не реагирует вообще).
← →
Loginov Dmitry © (2007-03-24 09:15) [1]Сделай наследника от TrackBar, лови требуемые WM_ - сообщения и обрабатывай их в соответствии с должной логикой.
← →
GrayFace © (2007-03-24 09:31) [2]http://www.grayface.nm.ru/RSPak.rar
RSTrackBar
← →
Dismember © (2007-03-24 10:03) [3]Спасибо большое, попробую процедуру WMLMouseDown как-нибудь переписать для другого компонента. И еще один ламерский вопрос: если есть исходники обоих компонентов, обязательно создавать новый компонент с наследованием свойств или можно добавлять новые функции?
← →
Loginov Dmitry © (2007-03-24 10:51) [4]> обязательно создавать новый компонент с наследованием свойств
> или можно добавлять новые функции?
Достаточно поступить так:type
TMyTrackBar = class(TTrackBar)
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
end;
TTrackBar = class(TMyTrackBar);
TForm3 = class(TForm)
......................
procedure TMyTrackBar.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
inherited;
{Полезный код}
end;
← →
GrayFace © (2007-03-24 16:58) [5]Loginov Dmitry © (24.03.07 10:51) [4]
Достаточно поступить так:
Проверял, вызывает глюки. Причем в самых неожиданных местах.
Dismember © (24.03.07 10:03) [3]
Спасибо большое, попробую процедуру WMLMouseDown как-нибудь переписать для другого компонента.
Да просто посмотри, как я сделал. Хотя исключительно для себя можно и упростить - я делал корректную отработку OnMouseDown.
Dismember © (24.03.07 10:03) [3]
И еще один ламерский вопрос: если есть исходники обоих компонентов, обязательно создавать новый компонент с наследованием свойств или можно добавлять новые функции?
Не понял.
← →
Dismember © (2007-03-24 17:31) [6]
> Не понял.
Я имел ввиду редактирование исходного кода компонента. Возможно ли это?
← →
GrayFace © (2007-03-24 17:37) [7]Да, только не редактируй исходники VCL - черевато несовместимостью dcu-шек и путаницей.
← →
GrayFace © (2007-03-24 17:38) [8]Если речь о моем компоненте, то используй как хочешь.
P.S. Че-то у меня часто в последнее время выходит по 2 поста подряд.
← →
Loginov Dmitry © (2007-03-24 22:22) [9]> Проверял, вызывает глюки. Причем в самых неожиданных местах.
Постоянно этим пользуюсь. Глюков пока не замечал. Что я делаю не так?
← →
Dismember © (2007-03-25 10:40) [10]Всем спасибо за ответы, проблема решилась даже проще, чем я мог полагать. Оказалось, что стандартный обработчик нужного мне трекбара обрабатывает нажатия только в области ползунка. Немного подредактировал код, и все стало работать как надо :)
← →
Dismember © (2007-03-25 17:11) [11]Столкнулся с еще 1 проблемой. В списке обработчиков событий всего одно событие OnChange. Описано как
property OnChange: TNotifyEvent read FOnChange write FOnChange;
Можно ли вынести события OnMouseDown и OnMouseUp в инспектор объектов? По аналогии с OnChange пытался прописать что-то вродеproperty OnChange: TNotifyEvent read FOnChange write FOnChange;
, но ничего не получилось, к тому же непонятно, куда деть параметрыButton: TMouseButton; Shift: TShiftState; X, Y: Integer
Если не трудно, напишите пожалуйста, какой код куда вставить.
← →
Dismember © (2007-03-25 17:36) [12]Поступил так, как советовал Loginov Dmitry в посте №4, но как-то неуклюже это выглядит. Да и событие OnMouseDown нужно всего для 1 экземпляра компонента, а не для всех сразу. Что подскажете?
← →
RASkov (2007-03-25 17:54) [13]> Можно ли вынести события OnMouseDown и OnMouseUp в инспектор
> объектов?
Нужно "новый" компонет устанавливать в IDE
> к тому же непонятно, куда деть параметры
property OnMouseDown и OnMouseUp имеют тип TMouseEvent там эти параметры описаны
← →
Loginov Dmitry © (2007-03-25 22:40) [14]> Да и событие OnMouseDown нужно всего для 1 экземпляра компонента,
> а не для всех сразу. Что подскажете?
Используй свойство Tag. Или имя. Типа:
procedure TMyTrackBar.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
inherited;
if Self.Name = "MyCoolTrackBar" then
begin
{Полезный код}
end;
end;
← →
Dismember © (2007-03-26 08:54) [15]Спасибо за советы, проблема благополучно решилась :) Вот мой код:
unit TimeBar;
interface
uses
XiTrackBar, Controls, Classes;
type
TTimeBar = class(TXiTrackBar)
private
FOnMouseDown: TMouseEvent;
FOnMouseUp: TMouseEvent;
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:
Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y:
Integer); override;
published
Property OnMouseDown : TMouseEvent read FOnMouseDown write
FOnMouseDown ;
Property OnMouseUp : TMouseEvent read FOnMouseUp write FOnMouseUp ;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("XiControls",[TTimeBar]);
end;
procedure TTimeBar.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
if Assigned(FOnMouseDown) then
FOnMouseDown(Self,Button,Shift,X,Y);
inherited MouseDown(Button,Shift,X,Y);
end;
procedure TTimeBar.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
if Assigned(FOnMouseUp) then
FOnMouseUp(Self,Button,Shift,X,Y);
inherited MouseUp(Button,Shift,X,Y);
end;
end.
Пришлось делать 2 компонент, но зато теперь все работает как надо.
← →
GrayFace © (2007-03-26 09:23) [16]Loginov Dmitry © (24.03.07 22:22) [9]
> Проверял, вызывает глюки. Причем в самых неожиданных местах.
Постоянно этим пользуюсь. Глюков пока не замечал. Что я делаю не так?
Удачу подшаманиваешь. :)
Dismember © (26.03.07 08:54) [15]
Вот так:TTimeBar = class(TXiTrackBar)
published
Property OnMouseDown;
Property OnMouseUp;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.058 c