На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как спрятать форму?
    Надо спрятать форму + добавить иконку в трей.
    Иконку я добавил, но форма не прячеться
    После прочтения DRKB 2.2 был написан такой код

    ExpandedWrap disabled
        type
        TDisconnectForm = class(TForm)
        procedure Ic(n:Integer;Icon:TIcon);
          procedure FormShow(Sender: TObject);
           protected
        procedure IconMouse(var Msg: TMessage); message WM_USER + 1;
      procedure ControlWindow(var Msg: TMessage); message WM_SYSCOMMAND; // WM_SYSCOMMAND       = $0112;
        end;
       
      var
        DisconnectForm: TDisconnectForm;
        Time:Integer;
      implementation
       
      uses WarningFormU;
       
      {$R *.dfm}
       
      procedure TDisconnectForm.FormShow(Sender: TObject);
      var
      sTime:string;
      begin
      sTime:=Paramstr(1);
      try
      {Проверка полученных данных}
      //Time:=strtoint(stime);
      Time:=2;
      except
      ShowMessage('Ошибка в параметре');
      Close;
      application.Terminate;
      exit;
       end;
       
      if (time<=0) then begin
      ShowMessage('Не положительное число');
      Close;
      application.Terminate;
      exit;
      end;
      //Праметр задан верно - включаем таймер
      Inc(time);
      ic(1,application.Icon);
      showwindow(handle, SW_hide);
      showwindow(Application.handle, SW_HIDE);
      {
      В DRKB написано что так можно спрятать форму
      Но она не прячеться - она остаеться видимой
      }
      Timer1.Enabled:=true;
      end;
       
      procedure Tdisconnectform.ControlWindow(var Msg: TMessage);
      begin
      if (Msg.WParam = SC_MINIMIZE) then
       begin
      Ic(1, Application.Icon);
      showwindow(Handle, SW_hide);
      //showwindow(Application.handle, SW_HIDE);
      end
      else
      inherited;
      end;
       
      Procedure TDisconnectForm.Ic(n:Integer;Icon:TIcon);
      Var Nim:TNotifyIconData;
      begin
       With Nim do Begin
       cbSize:=SizeOf(Nim);
       Wnd:=disconnectform.Handle;
       uID:=1;
       uFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP;
       hicon:=Icon.Handle;
       uCallbackMessage:=WM_USER+1;
       szTip:='Tip'
       End;
      Case n OF
       1: Shell_NotifyIcon(NIM_ADD,@Nim); //
       2: Shell_NotifyIcon(NIM_DELETE,@Nim); //
       3: Shell_NotifyIcon(NIM_MODIFY,@Nim); //
       End;
      end;
       
      procedure Tdisconnectform.IconMouse(var msg:Tmessage);
      var
      p: tpoint;
      begin
      GetCursorPos(p);
      if (Msg.LParam  = WM_RBUTTONUP) then
       begin
       PopupMenu1.Popup(p.X,p.Y);
       PostMessage(Handle, WM_NULL, 0, 0);
       end;
      end;


    Как спрятать форму?
      У формы вообще то сть свойство Visible и Метод Hide...
        Хм, а где Application.Minimize?
          также если хочешь чтобы приложение загрузилось сразу без формы, можно написать application.showmainform:=false в файле проекта
            Цитата
            У формы есть свойство Visible

            Цитата
            Хм, а где Application.Minimize?


            I)Пробуем
            ExpandedWrap disabled
              Visible:=false


            1) В TDisconnectForm.FormShow
            Получаем:
            Debugger Exception Notification

            Project Disconnect.exe raised exception class EInvalidOperation with message
            'Cannot change Visible in OnShow or OnHide'. Process stopped. Use Step or
            Run to continue.

            ( Нельзя менять visible в OnShow)

            2) В TDisconnectForm.FormCreate
            Получаем:
            Форма не прячеться ( но иконка в трее есть )

            II)Пробуем
            ExpandedWrap disabled
              Application.Minimize


            1) В TDisconnectForm.FormShow
            Получаем:
            Форма отображаеться.
            Если ее развернуть (из taskbar) и снова свернуть - тогда не отображаеться.

            2) В TDisconnectForm.FormCreate
            Форма все равно не прячеться (она спрятана за остальными окнами)

            III)Пробуем
            ExpandedWrap disabled
              Application.Minimize; Visible:=false;


            1) В TDisconnectForm.FormShow
            Получаем:
            Debugger Exception Notification
            Project Disconnect.exe raised exception class EInvalidOperation with message
            'Cannot change Visible in OnShow or OnHide'. Process stopped. Use Step or
            Run to continue.


            2) В TDisconnectForm.FormCreate
            Форма все равно не прячеться (она спрятана за остальными окнами)
              Цитата Delphist @
              1) В TDisconnectForm.FormShow
              Получаем:
              Debugger Exception Notification

              Project Disconnect.exe raised exception class EInvalidOperation with message
              'Cannot change Visible in OnShow or OnHide'. Process stopped. Use Step or
              Run to continue.
              ( Нельзя менять visible в OnShow)


              Компилятор понятно написал, в чем ошибка. Visible формы можно поменять в OnCreate или в design-time.

              Добавлено
              Только для главной формы нужно делать так:
              ExpandedWrap disabled
                procedure TForm1.FormCreate(Sender: TObject);
                begin
                  Application.ShowMainForm := False;
                end;
              Сообщение отредактировано: s-mike -
                Цитата s-mike

                Только для главной формы нужно делать так:
                Application.ShowMainForm := False;


                Сделал, но
                ExpandedWrap disabled
                  TDisconnectForm.FormShow
                - так как форма не появляеться,
                событие OnShow не воникает => код
                ExpandedWrap disabled
                  ic(1,application.Icon);
                  showwindow(handle, SW_hide);
                  showwindow(Application.handle, SW_HIDE);

                не выполняеться => прога в трей не прячеться.
                А по условию (см 1й пост )

                Цитата
                Надо спрятать форму + добавить иконку в трей.
                  Давай сделаем маааааленький эксперимент.
                  Кинь на ужасную форму кнопку и при нажатии на неё вызыви код, делающий махинации в трее и плюс убирает форму, ну примерно так:
                  ExpandedWrap disabled
                    procedure TForm1.Button10OnClick(Sender:TObject);
                    Begin
                       HideToSysTray; // прячемся
                       Form1.Visible:=False
                    End;



                  О результатх скажи.
                    2 SPrograMMer
                    Все работает ;)
                    Но надо чтобы форма сама пряталась ( без моего вмешательства )
                      Delphist,
                      Цитата
                      Но надо чтобы форма сама пряталась ( без моего вмешательства )

                      Поясни, не понемаю какая разница :huh: ?????
                        Поясняю

                        Форму можно спрятать так:
                        ExpandedWrap disabled
                          procedure TForm1.Button1Click
                          begin
                          Visible:=false;
                          end;

                        (Форма прячеться по нажатию на кнопку - после моих действий)

                        Можно спрятать так:
                        ExpandedWrap disabled
                          procedure TForm1.FormShow
                          begin
                          Visible:=false;
                          end;

                        (Такой трюк не пройдет, но тем не менее - форму прячет сама прога)
                          Delphist Я знал что после щелчка будет все работать, я просто хотел тебе маааленькую вещь показать - как мне кажется, по крайне мере я так делал когда-то, форма сразу после загрузки ДОЛЖНА показаться, а затем - прячем её. Я имею ввиду то что б можно бвло применить
                          ExpandedWrap disabled
                              Form1.Visible:=False

                          Нужно что б в этот момент форма была видима. Соответственно кидаем на форму таймер, установив ему интервал поменьше, можно 10 мс - тогда эффект может быть такой, что как форма отрисовалась и спраталясь, не будет заметно человеческому глазу.
                          и пишем ему:
                          ExpandedWrap disabled
                              Procedure TForm1.Timer1Timer(Sender:TObject);
                              Begin  
                                 Timer1.Enabled:=False; // что б больше не реагировал
                                 HideToSysTray; // прячемся в трей
                              End;


                          Теперь то работает?

                          Добавлено
                          А то 2SPrograMMer, 2SPrograMMer...
                            не самый подходящий способ, но.. =)

                            в OnCreate гл. формы:

                            сохрани в переменные - положение, длину и ширину формы

                            ExpandedWrap disabled
                              form1.top:=3000;
                              form1.left:=3000;


                            или

                            ExpandedWrap disabled
                              form1.Top:=0;
                              form1.Left:=0;
                              form1.Width:=0;
                              form1.Height:=0


                            в нужный момент присвой форме те переменные которые сохранил.
                            также можно form1.visible=true/false к этому делу подключить.
                              Цитата
                              Теперь то работает?

                              Работает. :)

                              Цитата
                              не будет заметно человеческому глазу.

                              Заметно.
                              Хотя это уже мелочи. ;)

                              2 SPrograMMer,s-mike,мыш:
                              Спасибо
                                Цитата SPrograMMer @
                                У формы вообще то сть свойство Visible и Метод Hide...

                                а если эта форма главная? тогда нужно делать так:
                                ExpandedWrap disabled
                                  Application.ShowMainForm:=false;

                                если я, конечно, не ошибаюсь
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0429 ]   [ 15 queries used ]   [ Generated: 15.06.25, 20:12 GMT ]