Тема: Delphi+API
Показать сообщение отдельно
Старый 23.12.2004, 21:41     # 4
Zueuk
Member
 
Аватар для Zueuk
 
Регистрация: 21.08.2003
Адрес: Россия
Пол: Male
Сообщения: 388

Zueuk Популярный человек на этом форумеZueuk Популярный человек на этом форумеZueuk Популярный человек на этом форумеZueuk Популярный человек на этом форумеZueuk Популярный человек на этом форумеZueuk Популярный человек на этом форумеZueuk Популярный человек на этом форумеZueuk Популярный человек на этом форуме
ЕЖ мне нужно на Делфи именно. и на чистом 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.
__________________
The Man Who Sold The World (© Nirvana)

So What! (© Metallica)
Zueuk вне форума