мне нужно на Делфи именно. и на чистом API. насколько возможно.
Ниже текст самого кода. Он несет только ознакомительный характер. образец.
Код:
program winmin;
uses
windows,
messages;
{!Модули windows и messages самые необходимые — они обязательно должны быть
объявлены в начале каждой Вашей программы!}
const
ID_EDIT=1001;
ID_BUTTON=1002;
var wc : TWndClassEx;//Переменная шаблона класса окна
MainWnd : HWND; //Описатель главного окна
Mesg : TMsg; //Переменная для цикла сбора сообщений
hStatic:HWND;
hEdit:HWND;
hButton:HWND;
// Title:string='Win Min';
// chBuff:integer;
pBuff:pointer;
chBuff:LPARAM;
// chBuff:AnsiString;
{ Далее следует оконная процедура главного окна. Обратите внимание на служебное
слово stdcall оно вынуждает компилятор генерировать особый вид кода, который
может быть вызван любой windows-программой, без этого служебного слова
программа не сможет работать вообще!}
function WindowProc(MainWnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult;
stdcall;
Begin
{Далее происходит цикл обработки сообщений}
case msg of
WM_CREATE:
begin
hStatic:=CreateWindow('static', 'Введите строку и нажмите кнопку OK',
WS_CHILD or WS_VISIBLE or SS_CENTER, 30,10,300,20,MainWnd,0,hInstance,NIL);
hEdit := CreateWindow('edit', NIL,
WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT, 30, 40, 300, 30,
MainWnd, ID_EDIT,hInstance,NIL);
hButton := CreateWindow('button', 'OK',
WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON,130, 85,100, 30,
MainWnd,ID_BUTTON,hInstance,NIL);
SetFocus(hEdit);
end;
WM_COMMAND:
begin
case (LOWORD(wParam)) of
ID_EDIT:
if ((HIWORD(wParam)) = EN_ERRSPACE)
then MessageBox(MainWnd,'Мало памяти','Win Min',MB_OK);
ID_BUTTON:
begin
SendMessage(hEdit,EM_GETLINE, 0, chBuff);
// pBuff:=@chBuff;
// GetMem(pBuff,chBuff);
MessageBox(MainWnd, pBuff, 'Win Min', MB_OK);
SetWindowText(hEdit,#10);//
SetFocus(hEdit);
end;
end;
end;
wm_destroy ://Сообщение посылаемое при уничтожении окна
Begin
postquitmessage(0); //exit;
Result:=0;
End;
else Result:=DefWindowProc(MainWnd,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:=200;
yPos:=150;
nWidth:=600;
nHeight:=400;
{ Создание главного окна}
MainWnd:=CreateWindowEx(
0, //флаги расширенных стилей
'WinMin : Main', //имя класса окна, данное при заполнении структуры wc
'Win Min', //заголовок окна
ws_overlappedwindow,//флаги стилей окна
xPos, //горизонтальная позиция окна
yPos, //вертикальная позиция окна
nWidth, //ширина окна
nHeight, //высота окна
0, //описатель родительского окна (parent) или окна-владельца (owner)
0, //описатель меню окна (меню нет, нет и описателя)
Hinstance, //описатель приложения
nil //address of window-creation data
);
ShowWindow(MainWnd,SW_SHOW);//Отображаем окно
//Цикл обработки сообщений
//он может слегка видоизменяться, но эти строчки присутсвуют всегда
While GetMessage(Mesg,0,0,0) do
begin
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end.