Конференция "KOL" » Программирование многооконного приложения для WinCE
 
  • Татьяна (28.01.08 14:26) [0]
    1.Как сделать, чтобы все формы выходили во весь экран. Как сделать, чтобы форму нельзя было переместить на экране, потянув за верхнюю границу.Свойства DefaultSize и DefaultPosition = true у всех форм.
    2. Как сделать, чтобы приложение не запускалось дважды.JustOne не получилось использовать, выходит ошибка при компилировании.
  • mdw © (28.01.08 15:52) [1]

    > 1.Как сделать, чтобы все формы выходили во весь экран.

    Имеется в виду, чтобы не было верхней и нижней строк Windows (кнопка пуск и строка меню)? Если да, поищите по форуму отвечал недавно.

    > Как сделать, чтобы форму нельзя было переместить на экране,
    >  потянув за верхнюю границу.Свойства DefaultSize и DefaultPosition
    > = true у всех форм.

    DefaultSize и DefaultPosition = true должно быть достаточно.


    > 2. Как сделать, чтобы приложение не запускалось дважды.JustOne
    > не получилось использовать, выходит ошибка при компилировании.

    У меня примерно так:

    При старте приложения:
    initialization
       TestApp;

    procedure TestApp;
    const AppClass = {$ifndef wince}'obj_App'{$else}'App'{$endif};
    var W: HWND;
       ClassName, S: KOLString;
       CopyData: TCopyDataStruct;
    begin
       SetLength(S, 100);
       SetLength(ClassName, 100);
       W:= FindWindow(AppClass, nil);
       while W <> 0  do begin
         GetClassName(W, PKOLChar(ClassName), 100);
         GetWindowText(W, PKOLChar(S), 100);
         if PKOLChar(ClassName) = AppClass then begin
           PKOLChar(S)[9]:= #0;
           if PKOLChar(S) = 'mdvReader' then Break;
         end;
         W:= GetWindow(W, GW_HWNDNEXT);
       end;
       
       if W <> 0 then begin
         S:= ParamStr(1);
         CopyData.dwData:= 09121972;
         if ParamCount > 0  then begin
           CopyData.cbData:= (Length(S)+1)*SizeOf(KOLChar);
           CopyData.lpData:= PKOLChar(S);
         end
         else begin
           CopyData.cbData:= 0;
           CopyData.lpData:= nil;
         end;
         SendMessage(W, WM_COPYDATA, 0, Integer(@CopyData));
         Halt(1);
       end;
    end;

    У Апплета проверяем:
    function TTextOutForm.KOLAppletMessage(var Msg: tagMSG; var Rslt: Integer): Boolean;
    begin
       Result:= False;
       case Msg.message of
         WM_COPYDATA:
           if PCopyDataStruct(Msg.lParam).dwData = 09121972 then begin

             SetForegroundWindow(Applet.Handle);
             Applet.ProcessMessages;

             if PCopyDataStruct(Msg.lParam).lpData <> nil then OpenFile(PKOLChar(PCopyDataStruct(Msg.lParam).lpData));
             Result:= True;
           end;
       end;
    end;

    Это для случая если нужно еще и данные передать приложению.
    А если просто активизировать, то в
    procedure TestApp;
    ....
       if W <> 0 then begin
    //вместо
    {      S:= ParamStr(1);
         CopyData.dwData:= 09121972;
         if ParamCount > 0  then begin
           CopyData.cbData:= (Length(S)+1)*SizeOf(KOLChar);
           CopyData.lpData:= PKOLChar(S);
         end
         else begin
           CopyData.cbData:= 0;
           CopyData.lpData:= nil;
         end;
         SendMessage(W, WM_COPYDATA, 0, Integer(@CopyData));
    }

    //пишем
         SetForegroundWindow(Ц);
         Halt(1);
       end;
    ....
    end;
  • YuriyM © (08.02.08 13:10) [2]
    Подскажите что делаю не так. Код процедуры вставил в Unit1, в секции initialization прописал TestApp. При запуске каждый раз новая копия.

    procedure TestApp;
    const AppClass = {$ifndef wince}'obj_App'{$else}'App'{$endif};
    var W: HWND;
      ClassName, S: KOLString;
    begin
      SetLength(S, 100);
      SetLength(ClassName, 100);
      W:= FindWindow(AppClass, nil);

      ShowMessage(Int2Str(W)); // Поставил для проверки W=0

      while W <> 0  do begin
        GetClassName(W, PKOLChar(ClassName), 100);
        GetWindowText(W, PKOLChar(S), 100);
        if PKOLChar(ClassName) = AppClass then begin
          PKOLChar(S)[9]:= #0;
          if PKOLChar(S) = 'mdvReader' then Break;
        end;
        W:= GetWindow(W, GW_HWNDNEXT);
      end;

      if W <> 0 then begin
        SetForegroundWindow(W);
        Halt(1);
      end;
    end;
  • Yury Sidorov (08.02.08 13:29) [3]
    В KOL-CE есть JustOneActivate для ограничения запуска одного экземпляра приложения и активации его при запуске второго экземпляра.
  • Yury Sidorov (08.02.08 13:31) [4]
    Кстати, это уже обсуждалось тут:
    http://pda.delphimaster.net/?id=1196634700&n=10
  • YuriyM © (08.02.08 13:42) [5]

    > В KOL-CE есть JustOneActivate для ограничения запуска одного
    > экземпляра приложения и активации его при запуске второго
    > экземпляра.

    Большое спасибо за ответ. Еще у меня получилось так:

    procedure TestApp;
    var
    W: HWND;
    begin
      W:= FindWindow(nil, 'Proba');
      if W<>0 then
         begin
            SetForegroundWindow(W);
            Halt(1);
         end;
    end;
  • Compiler © (08.02.08 13:47) [6]
    Я всегда использую

    CreateSemaphore(nil, 0, 1, 'My_Program');
    if (GetLastError = ERROR_ALREADY_EXISTS) then begin
      Halt(0);
    end;



    P.S. Вариантов масса
  • Yury Sidorov (08.02.08 14:12) [7]

    > Я всегда использую
    > CreateSemaphore(nil, 0, 1, 'My_Program');
    > if (GetLastError = ERROR_ALREADY_EXISTS) then begin
    >   Halt(0);
    > end;
    >
    > P.S. Вариантов масса


    Это просто защита от повторного запуска. А вопрос стоял в активации уже работающего приложение при попытке повторного запуска...
  • Compiler © (08.02.08 14:31) [8]
    > Yury Sidorov   (08.02.08 14:12) [7]

    +
    SetForegroundWindow(FindWindow(nil, 'Заголовок программы'));

  • имя (28.02.08 04:02) [9]
    Удалено модератором
  • lukeyhickman (04.05.08 19:13) [10]
    That and the women the doctor dated.    lesbian-naked  lesbian-oralsex  lesbian-lady  lesbian-cock  lesbian-sexy [url]After a period, he shifted his attentions to the girls brightly painted cunt lips, bringing the flailing tip of his weapon up between their legs with remarkable effect.
 
Конференция "KOL" » Программирование многооконного приложения для WinCE
Есть новые Нет новых   [134431   +15][b:0.047][p:0.001]