понедельник, 28 января 2008 г.

Первая программа

Все настройки произведены, теперь напишем простенькую программку с нескольками кнопками и Label`ами на API.

Все проекты рекомендую держать в одной папке например
мои докУменты\Lazarus Projects\

В ручную форму создавать я не буду, и создам её с помощью редактора ресурсов, для этого я использовал Resource Builder 2.6.4.1

Вот что у меня получилось:



В свойствах формы
Styles выставленно - DS_CONTROL
Windows Style выставленно - WS_POPUP WS_SYSMENU WS_CAPTION
в True остальное в False

Размер формы 168 на 223

На форме помещены три кнопки и два лэйбла(не знаю как пишется по руский)
Теперь выставляем Control_ID для всех элементов так
Кнопка с Caption=Label выставляем 0
Кнопка с Caption=Exit выставляем 1
Кнопка с Caption=Thread выставляем 3
Label0 выставляем 2
Label1 выставляем 4
Это нужно для того чтобы следующий код работал как надо.

Сохраняем под именем Form.res (не rc)
Вроде с формой все.
Теперь приступим к лазарю.
Нажимаем создать... и выбераем Program

Перед нами чистый проект.
Можно весь текст удалить и вставить вот это:

program project1;
{$R Form.res}  // Добавление ресурсов где находится форма

uses
windows, messages; // Без них никак, библеотеки

var
handle: Hwnd; //Handle окна
Msg: TMsg;  // для получения системных сообщений
inst: THandle; 

procedure procedure1; // Процедура нажатия кнопки Label
begin
SendDlgItemMessage(handle,
2,WM_SETTEXT,0,longint(PWideChar('Privet')));
// SendDlgItemMessage посылает сообщение Label0 об установки текста
// При создании формы мы указывали Control_ID у Label0 он равен 2
// WM_SETTEXT указывает что нужно установить текст
// longint(PWideChar('Privet')) это указатель на строку, так как мы используем константу то приходиться делать вот так.
end;

procedure procedure2; 
// Процедура нажатия кнопки Thread
begin
//Можете поэксперементировать здесь
end;

function WindowProc(Wnd:hwnd; uMsg:uint; wP:Wparam;lP:Lparam):Lresult; Stdcall;
// функция обработки сообщений главного окна
var nCode, ctrlID : word;
begin
if Umsg=wm_initdialog then
begin
result:=cardinal(true); // что делать при инициализации
end;
if Umsg=wm_command then
begin  // вот здесь обрабатываются наши кнопочки
nCode:=hiWord(wP);
ctrlID:=loWord(wP);
if ctrlid=1 then // Exit Button
begin
postquitmessage(0);
Result:=cardinal(true);
end;
if ctrlid=0 then procedure1; // Label Button
if ctrlid=3 then procedure2; // Thread Button
result:=cardinal(true);
end;
if umsg = wm_destroy then // уничтожение окна
begin
postquitmessage(0);
enddialog(wnd,0);
Result:=cardinal(true);
end;
if umsg = wm_close then // закрытие окна
begin
postquitmessage(0);
enddialog(wnd,0);
Result:=cardinal(true);
end;
result:=cardinal(false);
end;

var
h: HWND; //нужен для нахождения окна

begin
//szWindowClass , szTitle
h := FindWindow(nil,'Proj3'); // находим окно с заголовком Proj3
if (h<>0)then // Если нашли то покажем его и завершим эту программу
begin // подумайте для чего это нужно
ShowWindow (h, SW_SHOW);
SetForegroundWindow(h);
ExitProcess(0);
end;
inst:=GetModuleHandle(nil);
handle:=CreateDialog(inst,'DIALOG_0',0,@WindowProc); // Создание окна
if ((handle=INVALID_HANDLE_VALUE)or(handle=0)) then
begin
MessageBox(0,'Cant`t create dialog','Error ',0);
ExitProcess(0);
end;

showwindow(handle,SW_SHOW);
UpdateWindow(handle);

while GetMessage(@Msg, 0, 0, 0) do
begin
TranslateMessage(@msg);
DispatchMessage(@msg);
end;

end.


Попробуйте скомпилировать
и посмотреть что получится.

Настройка компилятора.
Проект\Параметры компилятора...

Закладки:

Пути\Другие модули
Пишем "$(LazarusDir)\lcl\interfaces\wince\" конечно без ковычег



Обработка



Код



Связывание



Все теперь можно пробывать.
Проще всего запускать программу на эмуляторе, а можно и на КПК.
Я пользуюсь первым.

Настройка эмулятора.

Скачиваем эмулятор и image файл к нему, у меня все установилось с Visual Studio 2005 правда там только Win CE 2003.
Все ссылки на эмуляторы и актив синк есть на этом сайте http://www.ladoshki.com/161_articles_Эмуляторы_Windows_Mobile_на_домашнем_компьютере.htm

Запускаем эмулятор в меню File\Configure...
прописать путь к вашим проектам.


Подчеркнуто синим.
Теперь будет проще, нажимаем в Лазаре Ctrl + F9 ждем строки
Проект успешно собран и переходи в эмуль, там тыкаем на приложение и все, смотрим своё творчество.

Комментариев нет: