Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывести текст 
V
    Опции темы
mspuz
Дата 1.2.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 20.6.2005
Где: Ногинск

Репутация: нет
Всего: нет



Код

function WindowProc(Hwn, PMsg, Wpr, Lpr: Longint): Longint; stdcall;
var
ps: tagPAINTSTRUCT;
rect: TRect;
MyHDC: HDC;
Str: String;
hfontt: HFONT;
begin
 Result := DefWindowProc(Hwn, PMsg, Wpr, Lpr);
//Çàêðûòèå ôîðìû
 if PMsg = WM_DESTROY then DoExit;
//Çàêðûòèå ôîðìû ïî íàæàòèþ ESC
 if (PMsg = WM_KeyDown)
 and (Wpr = VK_ESCAPE) then DoExit;
//Ïåðåðèñîâêà ôîðìû
 if PMsg = WM_PAINT then
  begin
   Str := 'Ìîé òåêñò' + #0;
   MyHDC := BeginPaint(Hwn, ps);
   {GetClientRect(Hwn, rect);
   DrawText(MyHDC, PAnsiChar(Str), -1, rect,
            DT_SINGLELINE or DT_CENTER or DT_VCENTER);}

   SelectObject(MyHDC, CreateFont(24,16,0,0,400,0,0,0,OEM_CHARSET,
              OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
              DEFAULT_QUALITY,DEFAULT_PITCH or
              FF_SCRIPT,
              PAnsiChar(Str)));
   SetTextColor(MyHDC,$0000FF00);
   SetBkColor(MyHDC,$0000FFFF);
   TextOut(MyHDC, 0, 0, PAnsiChar(Str),SIZEOF(Str));
   SelectObject(MyHDC, hfontt);
   EndPaint(Hwn, ps);
  end;
end;


Вот такой код вывода текста на API форму. Но на форме (белого цвета, стиль - WS_OVERLAPPEDWINDOW) ничего нет. Я использовал DrawText - не получилось, использовал TextOut - тоже самое. Понимаю, что ошибся, но где????
PM MAIL   Вверх
Snowy
Дата 1.2.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(mspuz @  1.2.2007,  17:35 Найти цитируемый пост)
SIZEOF(Str)
к строкам не применяется smile
Цитата(mspuz @  1.2.2007,  17:35 Найти цитируемый пост)
PAnsiChar(Str)
И тут ты намудрил в CreateObject 
Код
var
  txt: string;
  dc: HDC;
  ff: HFONT;
  old : HGDIOBJ;
begin
  txt := 'Мама мыла раму';
  dc := GetDC (hwn);
  ff := CreateFont (-20, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
          CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'Courier New');
  old := SelectObject (dc, ff);
  TextOut (dc, 10, 10, txt, Length(txt));
  SelectObject(dc, old);
  DeleteObject (ff);
  ReleaseDC(hwn, dc);
end;

PM MAIL   Вверх
mspuz
Дата 2.2.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 20.6.2005
Где: Ногинск

Репутация: нет
Всего: нет



Snowy, 
Большое спасибо (в который раз меня выручаешь). Но насчёт PAnsiChar(Str) я прав - string в этом месте не катит. А BeginPaint и EndPaint не используются??? Просто я решил переделать примерчик из Ассемблера и обнаружил такие же функции в Delphi.
И ещё русский язык не выводится!!! Как нужную кодировку установить???

Это сообщение отредактировал(а) mspuz - 2.2.2007, 12:19
PM MAIL   Вверх
Snowy
Дата 2.2.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(mspuz @  2.2.2007,  12:13 Найти цитируемый пост)
Но насчёт PAnsiChar(Str) я прав - string в этом месте не катит.
Ну да. Я просто запостил и заметил, что txt не объявлена в варах.
Это я уже на скорую руку добил. Там правильно будет txt: PChar;

Цитата(mspuz @  2.2.2007,  12:13 Найти цитируемый пост)
BeginPaint и EndPaint не используются???
Можно, но в этом нет необходимости.

Цитата(mspuz @  2.2.2007,  12:13 Найти цитируемый пост)
И ещё русский язык не выводится!!! Как нужную кодировку установить???
Это у тебя в системе не русский установлен.
Попробуй вместо ансичарсета поставить RUSSIAN_CHARSET.
Или выводить через TextOutW. Второй вариант надёжнее. Но не забуть тогда txt сделать PWideChar;
PM MAIL   Вверх
mspuz
Дата 2.2.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 20.6.2005
Где: Ногинск

Репутация: нет
Всего: нет



Snowy, Спасибо получилось!!!!
Но получается, что
MyHDC := GetDC(Hwn);
работает, а 
MyHDC := BeginPaint(Hwn, ps);
не работает, потому что как только я заменил эту строку, то у меня заработал и DrawText и TextOut!!!
PM MAIL   Вверх
Snowy
Дата 2.2.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Значит BeginPaint у тебя неверно определяет зону рисования.
Скорее всего в ps.rcPaint у тебя (0, 0, 0, 0). И за пределами этого "прямоугольника" оно не рисует.
Да и не нужно это тебе smile
PS 
Код
  SetBkMode(dc, TRANSPARENT);
Сделает твою надпись прозрачной smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.