![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывод в стандарте Юникод [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]А я просто разрешаю пользователям выбирать шрифт.