Конференция "KOL" » Как сделать скрытую форму
 
  • Barloggg (26.11.07 16:50) [0]
    Пишу программу которая не должна быть видимой.
    Но должна иметь форму.
    Это часики для LCD дисплея на клавиатуре Logitech G15.
    Запускается автоматом, и работает. При нажатии комбинации клавиш на экран выводится форма для настроек. Естественно форма нужна крайне редко.
    Как ее не создавать при запуске программы, а создавать по требованию.
    Более того, при закрытии формы программа должна продолжать работать, а форму можно уничтожить.

    И как такую программу закрыть кстати? Если нет формы?

    Как это сделать кашерно? (читай набросать мышкой на форму) или хотя бы полукашерно?
  • Barloggg (26.11.07 17:09) [1]
    да и еще, а как в KOl дело обстоит с курсором мыши?
    а точнее с его внешним видом, когда я последний раз эти заморачивался я делал это в VCL и все что надо было сделать это назначить цифру.
    А здесь нужна иконка курсора.
    Где и как ее взять?
  • Golem (26.11.07 21:56) [2]
    создание формы в режиме рантайм по определению не может быть кашерным )))) все пишется ручками)))
    например:

    program NotKasherno;

    uses
    Windows,
    Messages,
    Kol;

    type
    PForm1 = ^TForm1;
    TForm1 = object(TObj)
      Form, Btn: PControl;
    public
      procedure DoClick(Sender: PObj);
    end;

    var
    Form1: PForm1;

    procedure NewForm1(var Result: PForm1; AParent: PControl);    //не кашерное создание формы
    begin
    New(Result, Create);
    with Result^ do
    begin
      Form := NewForm(AParent, 'Form1').SetSize(300,300);
      Form.Add2AutoFree(Result);
      Applet := Form;
      Btn := NewButton(Form, 'Button1').PlaceUnder.ResizeParentBottom;   //не кашерное создание кнопки на форме
      Btn.OnClick := DoClick;
    end;
    end;

    { TForm1 }

    procedure TForm1.DoClick(Sender: PObj);     //не кашерное создание обработчика нажатия кнопки
    begin
    MessageBeep(mb_ok);
    end;

    //--------------------------------------------------------------------------
    begin                  
    Run(Applet);

    //некоторый код
    //код перехвата нажатия комбинации клавиш

    NewForm1(Form1, nil);   //вызов формы

    //некоторый код

    end.



    кстати, перехват  системных сообщений виндовс тоже не слишком кашерный ))))
  • Golem (26.11.07 21:58) [3]
    опшипся маленько
    прально так

    begin                  

    //некоторый код
    //код перехвата нажатия комбинации клавиш

    NewForm1(Form1, nil);   //вызов формы
    Run(Applet);

    //некоторый код

    end.

  • Barloggg (27.11.07 09:25) [4]
    нда, но у меня на форме много контролов получилось. делать это некашерно запарно. К тому же я как обычно что-нибудь доделываю и переделываю после релиза :)

    гм. а я кстати нашел способ. даже два.
    один это полукашерный.
    на форму бросается апплет и в нем перекрывается onMessage.
    а вокруг кода создания формы
    а именно вот этой строчки
    {$IFDEF KOL_MCK}
    {$I KOLLCDG15Main_1.inc}
    {$ENDIF}


    делается обвязка
    {$IFDEF KOL_MCK}
    procedure NewForm1( var Result: PForm1; AParent: PControl );
    {$ENDIF}
    {$I KOLLCDG15Main_1.inc}
    begin
    if createform then begin NewForm1( Result, AParent );end;
    end;
    {$ENDIF}


    таким образом можно вставить условие непосредственно перед созданием формы.  в данном случае через глобальную createform:boolean;

    Есть одна сложность. МСК постоянно переделывает этот код вставляя {$ENDIF} при каждом ребилде.

    А второй способ это создать два приложения...
    но и тот и другой имеет недостатки.
  • Дмитрий К © (27.11.07 09:35) [5]
    Applet + форму убрать из автоматически создаваемых.
  • Barloggg (06.12.07 15:23) [6]
    гм. при создании формы приложение через раз подвисает. И выдает на экран недорисованное окно. чтобы это значило? причем сообщение о ошибке не выводит.
  • FreGL © (10.12.07 17:39) [7]
    помоему тут проще надо делать через сервис
    основное приложение делается как системная служба,
    а второе приложение делается как форма, которая имеет доступ к настройкам, либо же, в первом приложении сделать хук на отлов какой то комбинации клавиш, и уже в этом обработчике сделать рантайм форму, отобразить, принять данные и уничтожиться. форму мона в дллку закинуть.
    можно конечно через КОМ обьекты , но во первых в них я тебе не советчик, во вторых скорее всего это муторное дело в КОЛе...
 
Конференция "KOL" » Как сделать скрытую форму
Есть новые Нет новых   [134431   +10][b:0][p:0.002]