Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2010, 07:57   #1
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию Помигать прямоугольником вокруг компонента при ошибке.

Всем доброго времени суток.
Пишу на Turbo Delphi Explorer.
Сейчас обрабатываю ошибки ввода в своей программе. Мне надо, помигать красным прямоугольником вокруг того компонента ввода (Tedit или TRadioGroup) где введены неправильные данные.
Как мигать самим фоном эдита, я написал:
Код:
//Мигаем фоном Edit'а:
Procedure BlinkEdit(w:TEdit);
begin
      for i:=0 to 3 do
      begin
        w.Color:=clRed;
        w.Font.Color:=clWhite;
        w.Update;
        Sleep(80);
        w.Color:=clWindow;
        w.Font.Color:=clWindowText;
        w.Update;
        Sleep(80);
      end;
end;
но мне не нравится.
Как помигать фоном группы радиокнопок я тоже нашел:
Код:
    begin
      bmp := TBitmap.Create;
      try
        bmp.Width := Form2.RadioGroup1.Width;
        bmp.Height := Form2.RadioGroup1.Height;
        Form2.RadioGroup1.PaintTo(bmp.Canvas, 0, 0);
        dc := GetDC (Form2.RadioGroup1.Handle);
        for i := 0 to 7 do begin
          BitBlt (dc, 0, 0, bmp.Width, bmp.Height, bmp.Handle, 0, 0, PATINVERT);
          Sleep (60 * (i mod 2 + 1));
          Form2.RadioGroup1.Update;
        end;
      ReleaseDC (Form2.RadioGroup1.Handle, dc);
    finally
    bmp.Free;
    end;
В принципе - работает, но мне не нравится инверсное мигание... Да и не совсем я понимаю эту процедуру, хоть и начитался уже про DC...
Вот как-то бы просто прямоугольником поверх всех компонентов помигать...

Я пробовал так:
создал TImage со свойством Transperent:=True;
в конструкторе поставил этот Image на передний план (Bring to Front).
потом, по аналогии с эдитом:
Procedure BlinkRect(L,T,H,W:integer);
Form2.Image1.Left:=L;
Form2.Image1.Top:=T;
ну и т.д.
потом организовал цикл, как в процедуре с Эдитами, только без Update... ничего не произошло.
вот и думаю, работоспособно решение или нет и надо было update делать или нет?
Almaas вне форума Ответить с цитированием
Старый 15.12.2010, 09:38   #2
Almaas
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 27
По умолчанию

Не, ну понятно, что я с TImage сегодня вечером еще посижу. Просто может есть более простые и универсальные варианты?
Almaas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сообщение об ошибке при вычислении длины строки vedro-compota Общие вопросы Delphi 24 17.05.2010 16:23
Indy, выход при ошибке подключения к прокси ArtInt Работа с сетью в Delphi 3 11.02.2010 16:15
Сообщение об ошибке при вводе неверного типа информации в DBEdit megaten БД в Delphi 6 17.05.2009 20:44
Закрыть программу, при ошибке Dr.Badnezz Общие вопросы Delphi 7 16.01.2009 00:32
вывести звёздочки прямоугольником designer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 13.11.2008 09:52