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

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

Вывод в стандарте Юникод [D6, Win95/98, Win2k]


MAxiMum ©   (2002-05-29 17:54:00) 

Я пишу программу,которая должна вставлять символы из многих языков (не программирования, конечно ). Я думаю, для этих целей надо использовать Юникод. Но, на сколько мне известно, компоненты не потдерживают такой кодировки.Как быть?


Игорь Шевченко   (2002-06-04 14:35:00) [1]

MAxiMum © (04.06.02 14:26)

Я же надавал кучу ссылок - неужели там ничего нет ?


MAxiMum   (2002-06-04 14:26:00) [2]

Говорят для этого надо переписать всю библиотеку VCL. По-другому, никак. А может, как-нибудь, можно попробовать переписать только, например, TMemo. А?


MAxiMum   (2002-06-03 18:11:00) [3]

Еще умельцы есть? Подскажите, плз.


Игорь Шевченко   (2002-06-03 17:25:00) [4]

Сабклассинг - это не написание нового компонента. Это подмена оконной процедуры окна.
SetWindowLong(hWnd, GWL_WNDPROC, Integer(MyNewEditWndProc));

А пример предлагаю сделать самостоятельно :-)


MAxiMum   (2002-06-03 17:15:00) [5]

Если можно пример. А без "сабклассинга" (т.е. написания нового компонента, да?) обойтись нельзя?


Игорь Шевченко   (2002-06-03 17:07:00) [6]

Обрабатывать их WM_PAINT, заняться сабклассингом (может быть...)


MAxiMum   (2002-06-03 16:57:00) [7]

Спасибо всем. Разобрался я с этим.
Теперь у меня другой вопрос. Как к стандартные объекты редактирования (например, TEdit, TMemo, TRichEdit и т.д.) мне можно поместить символ в кодировке Unicode. Не найду никак ответа.


Игорь Шевченко   (2002-06-03 12:29:00) [8]

Вот маленький пример:

unit UnicodeControl;

interface
uses
Graphics, Windows, Messages, Classes, Controls;

type
TUnicodeControl = class(TCustomControl)
private
procedure CMFontChanged (var Message : TMessage); message CM_FONTCHANGED;
protected
procedure Paint; override;
public
constructor Create (AOwner : TComponent); override;
property Color;
property Font;
end;

implementation
uses
SysUtils, Dialogs;

{ TUnicodeControl }


procedure TUnicodeControl.CMFontChanged(var Message: TMessage);
begin
inherited;
if Canvas <> nil then
Canvas.Font := Font;
end;

constructor TUnicodeControl.Create(AOwner: TComponent);
begin
inherited;
Font.Name := "Tahoma";
Font.CharSet := GREEK_CHARSET;
ParentFont := false;
end;

procedure TUnicodeControl.Paint;
var
Rect : TRect;
AText : array [0..255] of WideChar;
begin
inherited;
Rect := ClientRect;
OffsetRect(Rect, 2, 0);
FillChar(AText, Sizeof(AText), 0);
AText[0] := WideChar($03A0);
AText[1] := WideChar($03A1);
AText[2] := WideChar($0399);
AText[3] := WideChar($0392);
AText[4] := WideChar($0395);
AText[5] := WideChar($03A4);
AText[6] := WideChar($03A9);
DrawTextW(Canvas.Handle, AText, -1, Rect, DT_SINGLELINE);
end;

И в главной форме:

procedure TForm1.FormCreate(Sender: TObject);
begin
FUnicodeControl := TUnicodeControl.Create(Self);
with FUnicodeControl do begin
Parent := Self;
Color := clWhite;
SetBounds(10, 10, 100, 20);
end;
end;


McSimm   (2002-06-03 12:20:00) [9]

Проверь Handle окна, для которого будет вызываться TextOutW функцией IsWindowUnicode.
Выбери шрифт, содержащий символы Unicode - посмотри утилитой Character Map.

Шрифты обычно содержат далеко не все символы.

У меня все получилось


MAxiMum   (2002-06-03 11:08:00) [10]

Что никто не сможет ответить!???


MAxiMum   (2002-05-31 18:15:00) [11]

Понимаю, торопился, но не работает как надо.


Внук   (2002-05-31 17:57:00) [12]

Криво, но тороплюсь, рабочий день уже закончился :)

procedure TForm1.Button1Click(Sender: TObject);
var dc:HDC;
s:WideChar;
i:integer;
begin
dc:=GetDC(Handle);
for i:=2000 to 2050 do
begin
s:=WideChar(i);
TextOutW(dc,10+(i-2000)*20,10,@s,1);
Application.ProcessMessages;
sleep(500);
end;
ReleaseDC(Handle,dc);
end;


MAxiMum   (2002-05-31 15:33:00) [13]

Мне надо запихнуть в TDrawGrid, но каким образом я не знаю. Если использовать Canvas.TextOut и, как следствие, Chr, то вступает ограничение на тип Byte, на который она и рассчитана.
А нужно ведь Cardinal, да?


MAxiMum   (2002-05-31 15:21:00) [14]

Иными словами, как сделать таблицу символов с поддержкой Юникода?


KilkennyCat   (2002-05-29 19:52:00) [15]

А я именно под Win9x работаю


MAxiMum   (2002-05-29 19:21:00) [16]

А под Win9x?


KilkennyCat   (2002-05-29 18:47:00) [17]

А я просто разрешаю пользователям выбирать шрифт.


Наверх

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