Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.067 c
15-1334142183
Сергей М.
2012-04-11 15:03
2013.03.22
Занимательная криптография


15-1344857976
БарЛог
2012-08-13 15:39
2013.03.22
А как такая программа будет называться?


15-1330713889
wl
2012-03-02 22:44
2013.03.22
Небольшое предложение по улучшению форума


15-1333730960
Дмитрий С
2012-04-06 20:49
2013.03.22
Очень сильно тупит delphiXE


15-1345226547
Rouse_
2012-08-17 22:02
2013.03.22
Супертестер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский