IPB
ЛогинПароль:

> Пара вопросов, Окно WinApi
rzr
сообщение 24.03.2007 23:21
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Денис

Репутация: -  0  +


Люди, подскажите, пожалуйста:
Вот, виновник:

procedure Header;

  var

    Font:HFont;
    Ps:PaintStruct;
    Dc:HDc;
    R:Rect;

  begin

    Font:=CreateFont(36,12,
                     0,0,
                     710,0,0,0,
                     DEFAULT_CHARSET,
                     OUT_DEFAULT_PRECIS,
                     CLIP_DEFAULT_PRECIS,
                     PROOF_QUALITY,
                     DEFAULT_PITCH or FF_DONTCARE,
                     'Impact');


    Dc:=BeginPaint(Back,@Ps);

    R.Left:=10;
    R.Top:=96;
    R.Right:=100;
    R.Bottom:=196;

    SelectObject(Dc,Font);

    SetBkMode(dc,Transparent);

    SetTextColor(Dc,RGB(192,192,192));

    DrawText(Dc,'Pascal',-1,@R,DT_SINGLELINE or DT_TOP);

    R.Left:=12;
    R.Top:=94;
    R.Right:=112;
    R.Bottom:=194;

    SetTextColor(Dc,RGB(0,0,250));

    DrawText(Dc,'Pascal',-1,@R,DT_SINGLELINE or DT_TOP);

    EndPaint(Back,Ps);

  end;




Результат этой процедуры - надпись 'Pascal' с чем-то похожем на тень. Рисуется она у меня нормально, проблема в том, что, если свернуть окно или просто подвигать над ним другое окно какое-нить, то надпись эта проподает и не появляется вплоть до перезапуска приложения.
Что скажете? Как это можно исправить?

А ещё: как на окно поместить рисунок (точнее - иконку)? И что значит первый параметр в LoadIcon() или LoadImage()?

Спасибо за ответы

Сообщение отредактировано: rzr - 24.03.2007 23:30
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
volvo
сообщение 24.03.2007 23:25
Сообщение #2


Гость






Файл полностью присоедини... Важно, как ты обрабатываешь сообщения...
 К началу страницы 
+ Ответить 
rzr
сообщение 24.03.2007 23:38
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Денис

Репутация: -  0  +


За сообщения я ещё и не брался: думал пока внешний вид сделать, а что именно за сообщения здесь нужны? (если файл всё ещё нужен - прикреплю)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.03.2007 23:52
Сообщение #4


Гость






Все еще нужен. Прикрепи файл, который можно откомпилировать и запустить.

Вообще-то надо обрабатывать WM_PAINT, оно посылается приложению, когда нужно перерисовать окно. Вот тогда и нужно перерисовывать не только само окно, а и хидер, который ты нарисовал...
 К началу страницы 
+ Ответить 
rzr
сообщение 25.03.2007 0:12
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Денис

Репутация: -  0  +


С WM_PAINT разобрался, спасибо за подсказку. А не мог бы ты показать как мне на место idi_application иконку fpc'а кинуть? И ещё: нельзя ли как-нить обойтись без "перекодирования" текста, чтобы русские буквы нормально на окне отображались?


Прикрепленные файлы
Прикрепленный файл  program.pas ( 6.78 килобайт ) Кол-во скачиваний: 370
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
rzr
сообщение 9.04.2007 23:22
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Денис

Репутация: -  0  +


Люди, подскажите, пжлст: как выводить русский текст на окно без всяких функций-перекодировок? Или FP не поддерживает Unicode? Может я не те типы использую? Или директиву надо какую-нить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.04.2007 23:37
Сообщение #7


Гость






Ну, почему сразу "не поддерживает"? Здесь был:
Кодировки и Unicode в FPC ?
 К началу страницы 
+ Ответить 
rzr
сообщение 26.04.2007 23:50
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Денис

Репутация: -  0  +



Volvo

Скажи, пожалуйста, правильно ли я понимаю: чтобы нам отобразить русский текст на окне, нужно послать строку unicode (т.е. widestring). То бишь надо обычную строку перевести в widestring.

Такой вот код, например, не работает как хотелось бы:


  Title := 'АБВ';                   //в var Title: AnsiString; 
                                         //         WideTitle: WideString;
                                         //         WSM: TWideStringManager;

  WSM.Ansi2WideMoveProc (@Title,WideTitle,4);

  Main := MainFn;                 //это окно

  SendMessage (Main,WM_SETTEXT,0,LParam (WideTitle));




Компилируется нормально,
Выполнение прерывается на Ansi2WideMoveProc: ExitCode = 216

Что я делаю неправильно?

Сообщение отредактировано: rzr - 26.04.2007 23:54


Прикрепленные файлы
Прикрепленный файл  1.pas ( 1.97 килобайт ) Кол-во скачиваний: 298
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 22.10.2007 23:03
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
как выводить русский текст на окно без всяких функций-перекодировок

Та же проблема (кириллица из файла выходит в виде всяких каракуль), только я совсем не поняла, что делать wink.gif
Можете объяснить? rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.10.2007 23:06
Сообщение #10


Гость






Как выводишь, и в какой кодировке текст в файле? (лучше присоединить сам файл)
 К началу страницы 
+ Ответить 
Айра
сообщение 22.10.2007 23:20
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Вот код:
uses crt;
var s: string;
    ch: char;
    f: text;
begin
  assign(f, 'vopros.txt');
  {$I-}
  reset(f);
  {$I+}
  if IoResult=0 then
    begin
      while not eof(f) do
        begin
          read(f,ch);
          write(ch);
          if ch='?' then
            begin
              writeln;
              readln(s);
            end;
        end;
    end;
  close(f);
end.

Вот сам файл: Прикрепленный файл  vopros.txt ( 50 байт ) Кол-во скачиваний: 608

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.10.2007 23:58
Сообщение #12


Гость






Не знаю, что там в Висте творится, но XP SP2 (если установлен русский - как язык для не Unicode-приложений) все прекрасно отображает...
 К началу страницы 
+ Ответить 
andriano
сообщение 2.12.2007 8:31
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Кажется проблема с русским языком не совсем верно сформулирована (или я ее не так понял).
Благодаря Микрософт у нас вопроеки ГОСТу появилась новая кодировка символов, а именно - 1251. В DOS и консольных приложениях осталась кодировка, которая предусмотрена ГОСТ как "альтернативная", а у MS имеет номер 866.
Проблема проявляется ТОЛЬКО в том случае, если IDE, в котором ведется разработка и сама разрабатываемая программа используют различные кодировки. Самый простой и очевидный способ преодоления возникающих проблем - писать GUI приложения в GUI среде, а консольные - в консольной.
Альтернативняй вариант решения - использовать консольную среду, которая явно понимает кириллицу или GIU-редактор, позволяющий менять шрифт + русификатор клавиатуры, поддерживающий 866 страницу.
"Простых" способов для преодоления этой специфической проблемы, СГЕНЕРИРОВАННОЙ МИКРОСОФТ ИМЕННО ДЛЯ НАШЕЙ СТРАНЫ, нет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 30.07.2025 23:46
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"