Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно мне пример привести, как на окошке api текст написать? [D7, WinXP]


Страницы:   1 2

Иван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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо