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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2022, 16:35   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию Мгновенно скрыть форму

Вот такой вот код для скриншота

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp:TBitmap;
begin
    Form1.Visible:=False;
    Form1.Refresh;

    Sleep(150); {!!!!!!!!!}

    bmp := TBitmap.Create;
    bmp.Width := Screen.Width;
    bmp.Height := Screen.Height;
    BitBlt(bmp.Canvas.Handle, 0,0, Screen.Width, Screen.Height,
           GetDC(0), 0,0,SRCCOPY);
    Image1.Picture.Assign(bmp);
    bmp.Free;

    Form1.Visible:=True;
end;
Внимание, вопрос!
Как мгновенно скрыть форму, чтобы не было необходимости делать Sleep(150)?

Потому что без Sleep, или при маленьком значении - форма попадает в кадр.
Kronos913 вне форума Ответить с цитированием
Старый 25.04.2022, 20:04   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Единственное, что пришло на ум:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
    bmp:TBitMap;
    x, x1, y, y1: Integer;
begin
    x:=Screen.Width;
    y:=Screen.Height;
    y1:=Form1.Top;
    x1:=Form1.Left;

    Form1.Top:=y+2;
    Form1.Left:=x+2;

    bmp := TBitmap.Create;
    bmp.Width := x;
    bmp.Height := y;
    BitBlt(bmp.Canvas.Handle, 0,0, Screen.Width, Screen.Height,
           GetDC(0), 0,0,SRCCOPY);
    Image1.Picture.Assign(bmp);
    bmp.Free;

    Form1.Top:=y1;
    Form1.Left:=x1;
end;
Kronos913 вне форума Ответить с цитированием
Старый 25.04.2022, 21:17   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Form1.Refresh обновляет/перерисовывает клиентскую область формы, которая после Form1.Visible := False отсутствует. Используйте вместо Form1.Refresh
Код:
InvalidateRect(0, NULL, False);
чтобы инициировать принудительную перерисовку всех окон.
macomics вне форума Ответить с цитированием
Старый 26.04.2022, 01:23   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

А можно и вызвать
Код:
Application.ProcessMessages
Вот только не понятно зачем нужна эта самая форма?
northener вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрыть форму BoozZzilla Помощь студентам 3 01.04.2011 14:23
Скрыть форму maksim_serg Общие вопросы Delphi 5 30.01.2011 13:22
Скрыть форму в dll Dr.Badnezz Общие вопросы Delphi 2 21.05.2010 20:00
как скрыть форму? kos1nus Помощь студентам 4 08.12.2008 22:46
Как скрыть форму Михаил Юрьевич Общие вопросы Delphi 2 01.06.2008 15:37