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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
3-58545
pvv
2003-08-26 13:21
2003.09.18
Быстрый поиск по базе Paradox


1-58730
AnotherCoder
2003-09-07 20:20
2003.09.18
Размер структуры.


4-58972
Vorobyev Sergey
2003-07-02 14:19
2003.09.18
Как считать версию файла,образ которого находится в памяти ?


1-58733
Dilezzz
2003-09-07 14:48
2003.09.18
Чтение из файла. В чем ошибка?


1-58763
AndreySoft
2003-09-04 21:10
2003.09.18
Как считать из файла фрагмент текста?





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