Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПочему не работает TTrackBar.OnExit? Найти похожие ветки
← →
Валера (2012-04-29 11:02) [0]Этот код не раборает, Дельфи 7:
procedure TForm1.TrackBar1Enter(Sender: TObject);
begin
Caption:= "Enter";
end;
procedure TForm1.TrackBar1Exit(Sender: TObject);
begin
Caption:= "Exit";
ShowMessage("Exit");
end;
Или подскажите какое сообщение генерируется после "отжатия" бегунка?
Т.е. покак мы его таскаем все нормально, а как отпускаем нужно получить сообщение.
← →
Baks (2012-04-29 15:23) [1]Обрабатывай OnChange
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Caption:= IntToStr(TrackBar1.Position);
end;
← →
Валера (2012-04-29 15:43) [2]
> Baks (29.04.12 15:23) [1]
>
> Обрабатывай OnChange
Оно срабатывает при "таскании" ползунка.
Нужно получить событии при его отпускании.
← →
Плохиш © (2012-04-30 00:39) [3]OnKeyUp/OnKeyDown
← →
Германн © (2012-04-30 01:42) [4]
> Плохиш © (30.04.12 00:39) [3]
Это события клавиатуры.
> Валера (29.04.12 11:02)
OnEnter/OnExit это события возникающие когда указатель мыши входит/выходит на/с компонент.
Единственное простое решение дано в Baks (29.04.12 15:23) [1]
Решение для задачи "Нужно получить событии при его отпускании" - OnMouseUp. Но тут нужно уточнить задачу. Ибо OnMouseUp возбуждается как при отпускании кнопки мыши нажатой на самом ползунке, так и при отпускании кнопки мыши нажатой на самом треке.
← →
AntiUser (2012-04-30 02:01) [5]
> Германн © (30.04.12 01:42) [4]
OnEnter/OnExit это события возникающие когда указатель мыши входит/выходит на/с компонент.
Не совсем так. OnEnter/OnExit это установка/потеря компонентом фокуса.
А "указатель мыши входит/выходит на/с компонент", это MouseEnter и MouseLeave
← →
Германн © (2012-04-30 02:04) [6]
> AntiUser (30.04.12 02:01) [5]
Согласен. Посыпаю пеплом остаток моей причёски. :(
← →
Валера (2012-04-30 10:46) [7]Так как же быть?
← →
AntiUser (2012-04-30 10:59) [8]Ну фиг знает, я на память не помню чего там в трекбаре, но сдается мне что ты хочешь чего-то странного. Ты бы лучше задачу описал. Не то как ты видишь ее решение (то что в [0]), а именно задачу.
Ну а если на тех условиях что в [0], то посмотри у трекбара событие mouseup если есть, то на нем работай, если нет, то возьми у парента и по x, y определи над трекбаром ли.
Либо хелпера напиши к трекбару, это, наверное, будет лучший вариант для условий из [0].
Но еще раз повторюсь, не то ты делаешь мил человек.
← →
AntiUser (2012-04-30 11:00) [9]Да, и кстати, почему здесь, а не в начинающих?
← →
Влад (2012-04-30 11:02) [10]type
TForm1 = class(TForm)
TrackBar1: TTrackBar;
procedure FormCreate(Sender: TObject);
private { Private declarations }
procedure MyOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
public { Public declarations }
end;
TC = class(TControl);
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MyOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Caption := IntToStr(TrackBar1.Position);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TC(TrackBar1).OnMouseUp := MyOnMouseUp;
end;
← →
Влад (2012-04-30 11:05) [11]
> Да, и кстати, почему здесь, а не в начинающих?
тут народу больше?
даже если перенесут - будет две точки входа :)
← →
Baks (2012-04-30 14:29) [12]
> но сдается мне что ты хочешь чего-то странного
Вот именно так. Изначально неправильный подход. Дело в том, что обрабатывать OnMouseUp и т.п. нет смысла, т.к. изменить положение бегунка можно при помощи клавиатуры например и OnMouseUp не сработает.
← →
Валера (2012-04-30 16:04) [13]
> Влад (30.04.12 11:02) [10]
> TC = class(TControl);
Как называется этот прием?
← →
Валера (2012-04-30 16:07) [14]
> Влад (30.04.12 11:02) [10]
> TC = class(TControl);
Как называется этот прием?
> AntiUser (30.04.12 10:59) [8]
> Но еще раз повторюсь, не то ты делаешь мил человек.
Когда начинается OnChange меняется одно тяжелое значение.
Потом флагом проверяется, прошло ли оно или нет.
А при окончании OnChange, должно произойти еще одно изменение этого тяжелого значения.
Что тут не ясно?
(Тяжелое значение - вызов функции одной библиотеки, она относительно долго происходит)
> Дело в том, что обрабатывать OnMouseUp и т.п. нет смысла
Вот именно, как быть?
← →
Омлет © (2012-04-30 17:51) [15]
> Вот именно, как быть?
"Тяжелое" действие вынести в отдельный поток. При изменении позиции ползунка, останавливать поток и возобновлять с новым значением. Возможно, будет полезным кэширование результатов для уже вычесленных значений. Еще, как вариант, срабатывание по таймеру - если в течении 500 мс значение ползунка не менялось, начинаем считать.
← →
Омлет © (2012-04-30 17:57) [16]
> Как называется этот прием?
Protected Hack. Или доступ к защищенным полям класса.
← →
Влад (2012-04-30 22:22) [17]
> как быть?
ButtonStart
GetAllOptions;
RunCalc;
← →
Валера (2012-05-01 12:41) [18]
> Омлет © (30.04.12 17:51) [15]
> Возможно, будет полезным кэширование результатов для уже
> вычесленных значений.
Такого нет.
> Еще, как вариант, срабатывание по таймеру - если в течении 500 мс значение > ползунка не менялось, начинаем считать.
Костыль.
> "Тяжелое" действие вынести в отдельный поток.
И? Когда его запускать, а когда нет?
> Влад (30.04.12 22:22) [17]
>
>
> > как быть?
>
> ButtonStart
>
Что это?
← →
Baks (2012-05-01 15:34) [19]
> Валера
http://www.youtube.com/watch?v=gga1BEHNYOk
← →
Влад (2012-05-01 21:03) [20]
> Валера (01.05.12 12:41) [18]
> Что это?
сделать отдельную кнопку, по нажатию которой проверяются все настройки/состояния
а после начинается действо
← →
AntiUser (2012-05-02 02:59) [21]
> Валера (01.05.12 12:41) [18]
> > Омлет © (30.04.12 17:51) [15]
> Возможно, будет полезным кэширование результатов для уже вычесленных значений.
> Такого нет.
Значит нужно сделать.
> Еще, как вариант, срабатывание по таймеру - если в течении 500 мс значение ползунка не менялось, начинаем считать.
> Костыль.
Не костыль, а нормальный вариант.
> "Тяжелое" действие вынести в отдельный поток.
> И? Когда его запускать, а когда нет?
Этот вариант самый лучший.
Запускать на OnChange, предварительно проверив не запущен ли поток, если да, то остановить и запустить снова.
← →
Валера (2012-05-02 17:09) [22]
> Запускать на OnChange, предварительно проверив не запущен
> ли поток, если да, то остановить и запустить снова.
А когда выключить? :)
> Значит нужно сделать.
Такого нету, там просто функция принимающая хендл.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.058 c