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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 11.05.2007, 13:05   #1
puz
 
Регистрация: 08.05.2007
Сообщений: 5
По умолчанию чекбокс - поверх всех окон

Подскажите, пожалуйста, как сделать так, чтобы прога находилась поверх всех окон вслучае, когда в чекбоксе стоит флажок. Соответственно, когда флажок снят - у проги обычное поведение.
puz вне форума
Старый 11.05.2007, 13:41   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

SetWindowPos(Handle,
HWND_TOPMOST,
Left,
Top,
Width,
Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Старый 11.05.2007, 14:53   #3
puz
 
Регистрация: 08.05.2007
Сообщений: 5
По умолчанию

после того как я этот кусок вставил в событие, действительно прога после установки флажка стала оставаться поверх всех окон. Выглядит так:

procedure TForm2.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
SetWindowPos(Handle,
HWND_TOPMOST,
Left,
Top,
Width,
Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
...
...

после снятия флажка прога все равно остается поверх всех окон. как это можно изменить? Что не так? Вероятно, нужно что-то написать в else, но вот что?

Последний раз редактировалось puz; 11.05.2007 в 15:02.
puz вне форума
Старый 11.05.2007, 15:17   #4
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if form1.CheckBox1.Checked=true then
form1.FormStyle:=fsStayOnTop else
form1.FormStyle:=fsNormal;
end;
Трофимов Александр вне форума
Старый 11.05.2007, 15:26   #5
puz
 
Регистрация: 08.05.2007
Сообщений: 5
По умолчанию

Спасибо. Как же все легко, оказывается. Всегда поражаюсь, как сам не догадался? Ну ничего, молодой ишшо.
puz вне форума
Старый 11.05.2007, 15:34   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Код:
procedure TCustomForm.SetFormStyle(Value: TFormStyle);
const
  HWND_STYLE: array[Boolean] of HWND = (HWND_NOTOPMOST, HWND_TOPMOST);
var
  OldStyle: TFormStyle;
  LRecreate: Boolean;
begin
  if FFormStyle <> Value then
  begin
    if ((Value = fsNormal) and (FFormStyle = fsStayOnTop)) or
       ((Value = fsStayOnTop) and (FFormStyle = fsNormal)) then
    begin
      FFormStyle := Value;
      if not (csDesigning in ComponentState) and HandleAllocated then
        SetWindowPos(Handle, HWND_STYLE[FFormStyle = fsStayOnTop], 0, 0, 0, 0,
          SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOOWNERZORDER);
    end
    else
    begin
      if (Value = fsMDIChild) and (Position = poDesigned) then
        Position := poDefault;
      LRecreate := not (csDesigning in ComponentState);
      if LRecreate then
        UpdateRecreatingFlag(True);
      try
        if LRecreate then DestroyHandle;
        OldStyle := FFormStyle;
        FFormStyle := Value;
        if ((Value = fsMDIForm) or (OldStyle = fsMDIForm)) and not Ctl3d then
          Color := NormalColor;
        if LRecreate then UpdateControlState;
        if Value = fsMDIChild then Visible := True;
      finally
        if LRecreate then
          UpdateRecreatingFlag(False);
      end;
    end;
  end;
end;
Собственно эта функция в оригинале и используется )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Старый 11.05.2007, 17:58   #7
Vincent
Пользователь
 
Аватар для Vincent
 
Регистрация: 02.02.2007
Сообщений: 29
По умолчанию

Я это обычно немного проще делал:

procedure Form1.CheckBoxClick(Sender: TObject);
begin
if (Sender as TCheckBox).Checked then begin
Form1.FormStyle := fsStayOnTop;
Form1.OnPaint := FormPaint;
else begin
Form1.FormStyle := fsNormal;
Form1.OnPaint := nil;
end;
end;

procedure Form1.FormPaint(Sender: TObject);
begin
Application.RestoreTopMosts;
end;

Быстро пойманный эксепшн исключением не считается
Vincent вне форума
Закрытая тема


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поверх всех окон delphin100 Общие вопросы Delphi 2 19.04.2008 19:00
Поверх всех окон Патрон Общие вопросы Delphi 1 18.04.2008 16:57
форму поверх всех окон КатенокСПб Общие вопросы Delphi 2 26.07.2007 17:48
Форма поверх всех окон (!!!) Viteef Общие вопросы Delphi 12 29.06.2007 00:22
Форма поверх всех окон. Kamikadze_666 Общие вопросы Delphi 1 16.05.2007 07:10