Ковыряюсь во всяких справочниках... чего то ни фига не получается... Если кто может подскажите, как сделать или где поглядеть пример...
1. CreateWindow ( 'STATIC', text', WS_CHILD or WS_VISIBLE, 30, 8, 500, 80, handleWnd, 0, hInstance, nil ); * как задать ему цвет * сделать вертикальный скролл * изменить шрифт (размер, цвет и сам шрифт)
Легко... Но давай начнем с того, что тебе надо подкорректировать всю программу:
program WinApiTest;
uses Windows, Messages;
const myClassName= 'myWindow';
BTN_ID = 200; // ID кнопки
var handleWnd, myButton, myLabel, myStatic: HWND; myFont: HFONT;
WndClass: TWndClassEx; Msg: TMsg;
// Procedure & function >> function WindowProc(Window: HWND; AMessage: UINT; WParam: WPARAM; LParam: LPARAM): INT_PTR; stdcall; begin case AMessage of WM_COMMAND: // Здесь ловим ID нажатой кнопки begin case LoWord(WParam) of BTN_ID: // Вот он, значит, закрываем приложение begin PostQuitMessage(0); Result := 0; end; end; end;
WM_DESTROY: // Ну, или закрыли крестиком или Alt+F4 begin PostQuitMessage(0); Result := 0; end;
else // Если ничего не отработало - то вызываем стандартную функцию Result := DefWindowProc(Window, AMessage, WParam, LParam); end;
end;
// Main Function begin with WndClass do begin cbSize := SizeOf(WndClass); style := CS_HREDRAW or CS_VREDRAW; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hIcon := LoadIcon(0, IDI_APPLICATION); hCursor := LoadCursor(0, IDC_ARROW); hbrBackground := COLOR_BTNFACE + 1; lpszMenuName := nil; lpszClassName := myClassName; end; WndClass.hInstance := HInstance;
// ... и Edit myStatic := CreateWindow('edit', PChar('Borland Studio Projects Borland Studio Projects '+ 'Borland Studio Projects Borland Studio Projects'+ 'Borland Studio Projects Borland Studio Projects '+ 'Borland Studio Projects Borland Studio Projects '+ 'Borland Studio Projects Borland Studio Projects'+ 'Borland Studio Projects Borland Studio Projects '+ 'Borland Studio Projects Borland Studio Projects '+ 'Borland Studio Projects Borland Studio Projects'+ 'Borland Studio Projects Borland Studio Projects '+ 'Borland Studio Projects Borland Studio Projects'), WS_CHILD or WS_VISIBLE or WS_VSCROLL or ES_MULTILINE, 30, 25, 200, 100, handleWnd, 0, hInstance, nil );
Легко... Но давай начнем с того, что тебе надо подкорректировать всю программу: ... Посмотри, что я изменил, и что из этого получилось... А потом посмотрим, что делать дальше...
// Procedure & function function WindowProc(Window: HWND; AMessage: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; var Res: LRESULT; p: PChar; n: integer; begin case AMessage of WM_COMMAND: // Здесь ловим ID нажатой кнопки begin if ( LoWord( wParam ) >= IDRBtn1 ) and ( LoWord( wParam ) <= IDRBtn2 ) then begin CheckRadioButton( handleWnd, IDRBtn1, IDRBtn2, LoWord( wParam ) ); end; if ( LoWord( wParam ) >= IDRBtn3 ) and ( LoWord( wParam ) <= IDRBtn4 ) then begin CheckRadioButton( handleWnd, IDRBtn3, IDRBtn4, LoWord( wParam ) ); end; case LoWord(WParam) of BTN_ID: begin PostQuitMessage(0); Result := 0; end; IDRBtn1: begin end; // Обработка radiobutton'ов IDRBtn2: begin end; IDRBtn3: begin end; IDChBox1: begin // обработка checkbox'ов Res := SendMessage( ChBox1, BM_GETCHECK, 0, 0 ); case Res of BST_CHECKED: SetWindowText( myLabel, 'Состояние: включен' ); BST_UNCHECKED: SetWindowText( myLabel, 'Состояние: выключен' ); end; end; end; end; WM_DESTROY: // Ну, или закрыли крестиком или Alt+F4 begin PostQuitMessage(0); Result := 0; end; else // Если ничего не отработало - то вызываем стандартную функцию Result := DefWindowProc(Window, AMessage, WParam, LParam); end; end;
// Procedure & function begin with WndClass do begin cbSize := SizeOf(WndClass); style := CS_HREDRAW or CS_VREDRAW; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hIcon := LoadIcon(0, IDI_APPLICATION); hCursor := LoadCursor(0, IDC_ARROW); hbrBackground := COLOR_BTNFACE + 1; lpszMenuName := nil; lpszClassName := myClassName; end; WndClass.hInstance := HInstance;
myButton := CreateWindow('button', 'Close', WS_VISIBLE or WS_CHILD, 10, 179, 275, 22, handleWnd, BTN_ID, hInstance, nil); myLabel := CreateWindow('static', 'Text', WS_VISIBLE or WS_CHILD, 20, 10, 120, 14, handleWnd, 0, hInstance, nil); myStatic := CreateWindow('edit', PChar('Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects'+ 'Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects '+ 'Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects '+ 'Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects'+ 'Borland Studio Projects Borland Studio Projects Borland Studio Projects Borland Studio Projects'), WS_CHILD or WS_VISIBLE or WS_VSCROLL or ES_MULTILINE + WS_BORDER, 30, 25, 200, 100, handleWnd, 0, hInstance, nil );
CreateWindow('STATIC', PChar('|||||||||||||||||||||||||||||||||||||||||||||||||'), WS_CHILD or WS_VISIBLE or WS_BORDER + es_readonly, 100, 280, 400, 21, handleWnd, 0, hInstance, nil );