Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.17;
Скачать: CL | DM;

Вниз

Вывод в стандарте Юникод   Найти похожие ветки 

 
MAxiMum ©   (2002-05-29 17:54) [0]

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


 
KilkennyCat ©   (2002-05-29 18:47) [1]

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


 
MAxiMum ©   (2002-05-29 19:21) [2]

А под Win9x?


 
KilkennyCat ©   (2002-05-29 19:52) [3]

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


 
MAxiMum ©   (2002-05-31 15:21) [4]

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


 
MAxiMum ©   (2002-05-31 15:33) [5]

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


 
Внук ©   (2002-05-31 17:57) [6]

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

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 18:15) [7]

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


 
MAxiMum ©   (2002-06-03 11:08) [8]

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


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

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

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

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


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

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

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;



 
MAxiMum ©   (2002-06-03 16:57) [11]

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


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

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


 
MAxiMum ©   (2002-06-03 17:15) [13]

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


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

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

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


 
MAxiMum ©   (2002-06-03 18:11) [15]

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


 
MAxiMum ©   (2002-06-04 14:26) [16]

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


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

MAxiMum © (04.06.02 14:26)

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



Страницы: 1 вся ветка

Текущий архив: 2002.06.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
4-55347
AlexanderSK
2002-04-11 17:17
2002.06.17
Handle Dll


3-55007
Proton
2002-05-19 19:34
2002.06.17
Чем порекомендуетк пользоваться при созании отчетов?


3-55039
HDD
2002-05-19 11:48
2002.06.17
ADO


1-55152
ех
2002-06-02 22:39
2002.06.17
Иконки файлов


3-55019
sergey32
2002-05-22 16:54
2002.06.17
Делаю Insert в хранимой процедуре