Мигание Кнопки В Taskbar С Помощью Flashwindowex

Shouldercannon

Well-known member
25.05.2010
128
0
#1
Доброго времени суток!
Нашёл пример с запуском и остановкой мигания кнопки в TaskBar. И столкнулся с проблемами.
1. После остановки мигания кнопкой стоп, кнопка формы в TaskBar хоть и не мигает, но продолжает светиться (замечено если произвести остановку в момент мигания).
2. Как с помощью таймера зациклить мигание и затем остановить?
 

Вложения

sinkopa

Well-known member
17.06.2009
344
4
#2
Доброго времени суток!
Нашёл пример с запуском и остановкой мигания кнопки в TaskBar. И столкнулся с проблемами.
1. После остановки мигания кнопкой стоп, кнопка формы в TaskBar хоть и не мигает, но продолжает светиться (замечено если произвести остановку в момент мигания).
Похоже Ваши проблемы в нежелании читать хелпы... <_<
Ваш Button2Click замораживает моргание а не отменяет. Посто задайте условие для прекращения моргания.
FlashOptions
...
FLASHW_TIMER - Flash continuously, until the FLASHW_STOP flag is set. (моргаем пока флаг FLASHW_STOP не установлен)
FLASHW_TIMERNOFG = &HC ' Flash continuously until the window comes to the foreground. (соргаем пока окно не станет активным)
Код:
var
fl: FLASHWINFO; // глобальная переменная

procedure TFormMain.Button1Click(Sender: TObject);
begin
ZeroMemory(@fl,SizeOf(fl)); // очистить структуру
fl.cbSize := SizeOf(fl);
fl.hwnd := Self.Handle;
fl.dwFlags := FLASHW_ALL; // тоже самое что FLASHW_CAPTION or FLASHW_TRAY;
fl.uCount := 100; // после 99 "мыргов" - моргание прекратится
fl.dwTimeout := 0; // моргание со стандартной частотой курсора
FlashWindowEx(fl);
end;

procedure TFormMain.Button2Click(Sender: TObject);
begin
// структура была заполнена в Button1Click.
// тут просто изменяем набор флагов
fl.dwFlags := FLASHW_ALL or FLASHW_TIMERNOFG;
FlashWindowEx(fl);
end;
2. Как с помощью таймера зациклить мигание и затем остановить?
Не понял вопрос... это типа - где взять таймер? <_<
 

Shouldercannon

Well-known member
25.05.2010
128
0
#3
Не понял вопрос... это типа - где взять таймер?
Имел ввиду как это моргание через таймер пустить. Чтобы моргало хоть вечность, пока не произойдёт нужное действие.
Решено. TTImer не нужен.
Код:
fl.dwFlags := FLASHW_ALL or FLASHW_TIMER;
но без
Код:
fl.uCount
иначе эффекта не будет.