Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

Программирование многооконного приложения для WinCE   Найти похожие ветки 

 
Татьяна   (2008-01-28 14:26) [0]

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


 
mdw ©   (2008-01-28 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 ©   (2008-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   (2008-02-08 13:29) [3]

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


 
Yury Sidorov   (2008-02-08 13:31) [4]

Кстати, это уже обсуждалось тут:
http://delphimaster.net/view/11-1196634700/


 
YuriyM ©   (2008-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 ©   (2008-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   (2008-02-08 14:12) [7]


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


Это просто защита от повторного запуска. А вопрос стоял в активации уже работающего приложение при попытке повторного запуска...


 
Compiler ©   (2008-02-08 14:31) [8]

> Yury Sidorov   (08.02.08 14:12) [7]

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


 
имя   (2008-02-28 04:02) [9]

Удалено модератором


 
имя   (2008-05-04 19:13) [10]

Удалено модератором



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
3-1231878365
serko
2009-01-13 23:26
2009.12.27
Вместо русских букв вопросительные знаки...


1-1230592103
ivanoff
2008-12-30 02:08
2009.12.27
Форма MDIChild не разворачвается полностью


15-1250874659
Yegorchic
2009-08-21 21:10
2009.12.27
Сломался RAID-массив


15-1256321944
POOP
2009-10-23 22:19
2009.12.27
=> *.eps


15-1256703324
Омлет
2009-10-28 07:15
2009.12.27
Занимательное программирование :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский