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

Вниз

создание формы на WinApi   Найти похожие ветки 

 
Kelvin   (2004-01-08 14:03) [0]

Уважаемые мастера.Расскажите как создать простую форму на WinApi? Но с максимумом комментариев,а не как обычно "пишите этот код". Где только не искал, нигде не могут нормально все объяснить.


 
Игорь Шевченко ©   (2004-01-08 14:11) [1]


> как создать простую форму на WinApi


forms.pas


 
y-soft ©   (2004-01-08 14:22) [2]

>Kelvin   (08.01.04 14:03)  

Плохо, наверное, искали.

Есть множество разжеванных примеров в любом классическом учебнике по программированию для Windows - у того же Петцольда, например.

Раз не понимаете объяснения, то значит еще не совсем понимаете, как устроена стандартная программа Windows (очередь сообщений, дескрипторы, стили и классы окон etc)...


 
YuRock ©   (2004-01-08 19:07) [3]

"Форма" - это надуманное в VCL слово. В API нет форм - только окна. И создаются они с помощью функции CreateWindow


 
GLFox   (2004-01-12 14:04) [4]

Вот примерчик (создает минимайзнетую окошку):
procedure CreateWindow(hInst:THandle; sName:String);
var WndClassEx:TWndClassEx;
begin
 Self.hInst:=hInst;
 with WndClassEx do begin
   cbSize:=SizeOf(TWndClassEx);
   style:=0{CS_HREDRAW or CS_VREDRAW};
   lpfnWndProc:=@MainWndProc;
   cbClsExtra:=0;
   cbWndExtra:=0;
   hInstance:=hInst;
   hIcon:=0{LoadIcon(hInst,"MAINICON")};
   hCursor:=0{LoadCursor(hInst,IDC_ARROW)};
   hbrBackground:=0{COLOR_BTNFACE+1};
   lpszMenuName:=nil;
   lpszClassName:=WndClassName;
   hIconSm:=0;
 end;
 RegisterClassEx(WndClassEx);
 hWindow:=CreateWindowEx(WS_EX_TOPMOST or WS_EX_TOOLWINDOW, WndClassName, PChar(sName),
                         WS_MINIMIZE, 0,0,0,0, 0, 0, hInst, nil);
 if hWindow=0 then begin
   MessageBox(0,GetSysError(GetLastError),AppTitle,MB_OK+MB_ICONSTOP);
 end;
end;


 
sniknik ©   (2004-01-12 16:26) [5]

искал действительно плохо, оно везде, даже в потрепаться обуждают причем с кучей примеров
http://delphimaster.net/view/15-1073564361/  
а вот с комментариями обломс, их писать не любят. разве что за деньги (в книгах).


 
Иван Шихалев ©   (2004-01-12 20:21) [6]

http://fpc.by.ru/win32/win32-01.shtml


 
Akvilon ©   (2004-01-13 00:36) [7]

Взято из Справочника по winapi  http://www.soobcha.ru/rushelp

program winmin;

uses
 windows, messages;

{"модули windows и messages  самые необходимые — они обязательно должны быть
объявлены в начале каждой Вашей программы!}
var
 wc : TWndClassEx;  //Переменная шаблона класса окна
 MainWnd : HWND;   //Описатель главного окна
 Mesg : TMsg;          //Переменная для цикла сбора сообщений
{  Далее следует оконная процедура главного окна. Обратите внимание на служебное
 слово stdcall оно вынуждает компиллятор генерировать особый вид кода, который

 может быть вызван любой windows-программой, без этого служебного слова
 программа не сможет  работать вообще!}

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult;
stdcall;
Begin
 {Далее происходит цикл обработки сообщений}
 case msg of
 wm_destroy :  //Сообщение посылаемое при уничтожении окна
   Begin
    postquitmessage(0); exit;

    Result:=0;
   End
  else Result:=DefWindowProc(wnd,msg,wparam,lparam);
 end;
End;

{Переменные xPos,yPos,nWidth,nHeight в принципе не нужны, однако я их завел
(и вам рекомендую) для лучшей читабельности программы}

var
 xPos,yPos,nWidth,nHeight : Integer;
begin //Тело программы
{  Далее идет заполнение шаблона класса окна}

wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;

wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="WinMin : Main";
RegisterClassEx(wc); //Регистрация нового класса в системе

{"заполнение переменных xPos,yPos,nWidth,nHeight}

xPos:=100;
yPos:=150;
nWidth:=400;

nHeight:=250;

{ Создание главного окна}
MainWnd:=CreateWindowEx (
0,                    //флаги расширенных стилей
"WinMin : Main",    //имя класса окна, данное при заполнении структуры wc
"Win Min",          //заголовок окна
ws_overlappedwindow, //флаги стилей окна
{подробнdее о стилях см. после текста программы}
xPos,               //горизонтальная позиция окна
yPos,               //вертикальная позиция окна

nWidth,             //ширина окна
nHeight,            //высота окна
0,                  //описатель родительского окна (parent) или окна-владельца (owner)
0,                  //описатель меню окна (меню нет, нет и описателя)
Hinstance,          //описатель приложения
nil                 //address of window-creation data
);
ShowWindow(MainWnd,CmdShow); //Отображаем окно

//Цикл обработки сообщений
//он может слегка видоизменяться, но эти строчки присутсвуют всегда

While GetMessage(Mesg,0,0,0) do
begin
 TranslateMessage(Mesg);
 DispatchMessage(Mesg);
end;
end.

Комментарий: Осталось только уточнить ряд деталей. Во-первых, ВСЕ присутствующее в данной программе (кроме комментариев, разумеется) ОБЯЗАТЕЛЬНО. Укоротить принципиально невозможно, можно, конечно, убрать некоторые переменные, но это сути дела не меняет. Во-вторых, в оконной процедуре могут присутствовать и другие строчки, принимающие  сообщения. В-третьих, вызов в оконной процедуре функции DefWindowProc жизненно необходим. DefWindowProc - это оконная процедура по умолчанию, она обеспечивает окну возможность "вести" себя как окну, т.е. перетаскиваться мышкой, сворачиваться, разворачиваться и т.д.



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

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

Наверх




Память: 0.49 MB
Время: 0.033 c
1-1079008672
Nataly
2004-03-11 15:37
2004.03.28
Перевод из DOS кодировки в Windows (стандартные средства)


6-1073871867
iWorm
2004-01-12 04:44
2004.03.28
Учет количества переданных байт


3-1077807154
Ozone
2004-02-26 17:52
2004.03.28
Структура БД


3-1077879757
Ega23
2004-02-27 14:02
2004.03.28
Проверка на наличие временной таблицы


3-1077192527
denmin
2004-02-19 15:08
2004.03.28
Помогите завязать таблицы Paradox и SQL Server 2000





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский