![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно мне пример привести, как на окошке api текст написать? [D7, WinXP]
Иван2 © (2004-12-09 18:39:00)Сколько не смотрю примеров winapi, как окошко создать - все есть, а как на нем выводить текст - нету.
Иван2 (2004-12-09 20:04:00) [21]Не понимаю. Я сделал проект,
потом на нажатии кнопки делаю создание окна как указано, только без обработки сообщений while GetMessage,
for i:=0 to 100000 do begin
ApiText:=IntToStr(i)+' %';
UpdateWindow(ApiWnd) //(с RedrawWindow не разобрался, но из хелпа выудил, что они одинаковы)
end,
а текст на нем все равно только тот, который вначале был.
clickmaker (2004-12-09 19:46:00) [22]
> [3] Иван2 (09.12.04 19:24)
> Я в написании нашел, что WM_Paint нельзя посылать окну самому.
> А если мне надо передать ему текст и перерисовать его с
> новым тестом?
SetWindowText()
в WM_PAINT
GetWindowText(hwnd, szText);
TextOut(DC, 0, 0, szText, 15);
для принудительного освежения окна - RedrawWindow()
Иван2 (2004-12-09 19:28:00) [23]Игорь Шевченко © :
Спасибо за пример! А если мне нужно меняющийся текст писать? А то я к Вашему коду добавил глобальную строковую константу для вывода, в программе меняю ее - а окно не меняет текст.
Иван2 (2004-12-09 19:24:00) [24]Я в написании нашел, что WM_Paint нельзя посылать окну самому. А если мне надо передать ему текст и перерисовать его с новым тестом?
Игорь Шевченко (2004-12-09 19:10:00) [25]
program WinApi;
uses
Windows, Messages, SysUtils;
{$R *.RES}
function MyCoolWndProc (Window: HWND; Message, WParam: Cardinal;
LParam: Cardinal): Longint; stdcall;
var
ps : PAINTSTRUCT;
DC : HDC;
r : TRect;
begin
case Message of
WM_DESTROY:
begin
PostQuitMessage (0);
Result := 0;
Exit;
end;
WM_PAINT:
begin
dc := BeginPaint (Window, ps);
try
TextOut(DC, 0, 0, 'Hello, Windows!', 15);
SetRect (R, 100, 100, 100, 100);
DrawText (DC, 'Hello, world!', Length('Hello, world!'), R, DT_CALCRECT);
SetBkColor (DC, GetSysColor(COLOR_BTNFACE));
DrawText (DC, 'Hello, world!', Length('Hello, world!'), R,
DT_LEFT OR DT_NOPREFIX);
OffsetRect (R, -1, -1);
Inc( R.Right, 3);
Inc( R.Bottom, 2);
DrawEdge (DC, R, EDGE_ETCHED, BF_RECT);
finally
EndPaint (Window, ps);
end;
end;
end;
Result := DefWindowProc (Window, Message, WParam, LParam);
end;
var WClass : WNDCLASS;
MyHWND : HWND;
MyMsg : MSG;
begin
WClass.hInstance := HInstance;
WClass.hIcon := 0;
WClass.hCursor := LoadCursor (0, IDC_ARROW);
WClass.hbrBackground := HBRUSH(GetStockObject(WHITE_BRUSH));
WClass.lpfnWndProc := @MyCoolWndProc;
WClass.lpszClassName := 'MyCoolClass';
if RegisterClass (WClass) = 0 then begin
RaiseLastWin32Error;
Exit;
end;
MyHWND := CreateWindowEx (0, 'MyCoolClass', 'MyCoolWindow',
WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
0, 0, HInstance, nil);
if MyHWND = 0 then begin
RaiseLastWin32Error;
Exit;
end;
ShowWindow (MyHWND, SW_SHOWNORMAL);
UpdateWindow (MyHWND);
while GetMessage(MyMsg, 0, 0, 0) do begin
TranslateMessage (MyMsg);
DispatchMessage(MyMsg);
end;
end.
С уважением,
MBo (2004-12-09 18:55:00) [26]textout drawtext