Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.18;
Скачать: CL | DM;

Вниз

Delphi и WinAPI, общие вопросы.   Найти похожие ветки 

 
MadGhost ©   (2003-09-07 13:38) [0]

Здравствуйте уважаемые мастера, купил книжечку Win32 API но для программирования на Си++, попробовал вроде все работает, понял как обрабатываются сообщения, как же все это делается в Делфи, т.е. создать окно, кнопку, обработать сообщение?
может кто ссылки хорошие знает, я искал в Яндексе че т ниче интересного не видел :(


 
Marser ©   (2003-09-07 17:49) [1]

Так же и делается, с небольшими поправками. Вот хелп, может помочь http://www.soobcha.ru/rushelp/winapihelp.zip


 
Юрий Зотов ©   (2003-09-07 17:51) [2]

Точно так же, как и в Си, причем никакие ++ здесь тоже ни при чем. Вызываете нужные функции API в нужной последовательности, вот и все.

Классический пример - знаменитая "Hello, world!". Приведенный ниже код сохраните в файле HelloWorld.dpr и можете сразу загружать его в Delphi и запускать. Досконально разберите код с книжкой в руках - сразу все поймете. И обратите внимание на размер EXE-файла.

program HelloWorld;

uses
Windows,
Messages;

// Оконная функция - обрабатывает все поступающие окну сообщения.
function WndFunc(Wnd, Msg: DWord; wParam, lParam: integer): integer; stdcall;
var
DC: HDC;
PaintStruct: TPaintStruct;
Rect: TRect;
begin
case Msg of
WM_Paint:
begin // Если поступило сообщение WM_Paint,
DC := BeginPaint(Wnd, PaintStruct); // то подготовить отрисовку,
GetClientRect(Wnd, Rect); // получить клиентскую область и в ее центре отрисовать текст,
DrawText(DC, "Hello, World!", -1, Rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
EndPaint(Wnd, PaintStruct); // затем сообщить системе, что рисование завершено
Result := 0 // и что сообщение WM_Paint обработано.
end;
WM_Destroy:
begin // Если поступило сообщение WM_Destroy,
PostQuitMessage(0); // то послать в очередь потока сообщение WM_Quit
Result := 0 // и сообщить системе, что WM_Destroy обработано.
end
else Result := DefWindowProc(Wnd, Msg, wParam, lParam) // Для других сообщений вызвать стандартную оконную функцию.
end
end { of WndFunc };

const
AppName = "HelloWorld";

var
Msg: TMsg;
WndClass: TWndClassEx;

begin { main }

// Заполняем запись WndClass и регистрируем в системе класс окна
with WndClass do
begin
cbSize := SizeOf(WndClass);
Style := CS_HRedraw or CS_VRedraw;
lpfnWndProc := @WndFunc;
hIcon := LoadIcon(0, IDI_Application);
hCursor := LoadCursor(0, IDC_Arrow);
hbrBackground := hBrush(Color_Window);
lpszMenuName := Nil;
lpszClassName := AppName;
hIconSm := hIcon
end;
WndClass.hInstance := hInstance;
RegisterClassEx(WndClass);

// Создаем и показываем окно заданного класса
CreateWindowEx(0, AppName, AppName, WS_OverlappedWindow or WS_Visible,
CW_UseDefault, CW_UseDefault, CW_UseDefault, CW_UseDefault, 0, 0, hInstance, Nil);

// Цикл обработки сообщений (работает, пока не поступит сообщение WM_Quit).
while GetMessage(Msg, 0, 0, 0) do // Выбрать сообщение из очереди потока
begin // и, если это сообщение не WM_Quit, то
TranslateMessage(Msg); // преобразовать сообщение клавиатуры
DispatchMessage(Msg) // и вызвать функцию окна Msg.hWnd
end;

// Передаем системе код завершения программы
Halt(Msg.wParam)
end.


 
MadGhost ©   (2003-09-08 07:34) [3]

большущее спасибо :))) вчера на VC6 кодил в OpenGL на чистом АПИ, вот загорелся на Делфях такое же сделать, и о радость в одном из исходников нашел почти тоже самое, ту же структуру :)
я рад что все так просто.
Спасибо всем отозвавшимся :)


 
mishgan   (2003-09-08 12:42) [4]

В конце программы вызов Halt(..) я бы заменил на
ExitCode:=Msg.wParam;



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

Текущий архив: 2003.09.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-58632
Bezpal
2003-09-05 13:21
2003.09.18
Как сделать круглую или треугольную форму или форму - звезду


1-58634
andriy
2003-09-05 12:47
2003.09.18
Excell: Workbooks.Close?


3-58517
P0tia
2003-08-28 13:33
2003.09.18
Сохранение Рабочий книги в


14-58866
asdqwer
2003-08-30 09:59
2003.09.18
X Linux Refresh Rate


1-58681
mfender
2003-09-04 17:12
2003.09.18
Как программе указать, потомком чего является компонент.