Как написать букву ниже уровня строки?
Например чтобы химическая формула H2O была правильно написана?
(в Дельфи колдовал с помощью нескольких свойств LowInd. , но в Лазарусе это не прокатывает...)
Модератор: Модераторы
procedure DrawText(var x: Integer; y: Integer;
Canvas: TCanvas; const t: String; Low: Boolean=False);
begin
if Low then y:=y+CAnvas.TextHeight('Y') div 2;
Canvas.TextOut(x,y, t);
inc(x, Canvas.TextWidth(t));
end;
procedure TForm1.FormPaint(Sender: TObject);
var
x : Integer;
begin
x:= 10;
DrawText(x, 50, Canvas, 'H');
DrawText(x, 50, Canvas, '2',true);
DrawText(x, 50, Canvas, 'O');
end;
kuksha писал(а):Посмотрел как я это в дельфи делал и понял, что нужен аналог RichEdit (нужно копировать из этого элемента, редактирование не нужно). Есть в Лазарусе такой? Если есть, то как называется и как в нём выше-ниже строки буквы расставлять?
< sub > / < sup >
LowInd.cbSize:= sizeof(LowInd);
if Form1.Kiril.Font.Name<>'Dilyana+' then
begin
LowInd.dwMask:= CFM_SIZE;
LowInd.yHeight:= vysota;
SendMessage(Form1.Kiril.Handle, EM_SETCHARFORMAT, SCF_SELECTION, LPARAM(@LowInd));
end;
LowInd.dwMask:= CFM_OFFSET;
LowInd.yOffset:= vniz; // в зависимости от знака: - нижний индекс, + верхний ;)
SendMessage(Form1.Kiril.Handle, EM_SETCHARFORMAT, SCF_SELECTION, LPARAM(@LowInd));
kuksha писал(а):Вот кусок дельфи-кода, но я за давностью лет не могу сходу сказать что я тут наколбасил...
- Код: Выделить всё
LowInd.cbSize:= sizeof(LowInd);
if Form1.Kiril.Font.Name<>'Dilyana+' then
begin
LowInd.dwMask:= CFM_SIZE;
LowInd.yHeight:= vysota;
SendMessage(Form1.Kiril.Handle, EM_SETCHARFORMAT, SCF_SELECTION, LPARAM(@LowInd));
end;
LowInd.dwMask:= CFM_OFFSET;
LowInd.yOffset:= vniz; // в зависимости от знака: - нижний индекс, + верхний ;)
SendMessage(Form1.Kiril.Handle, EM_SETCHARFORMAT, SCF_SELECTION, LPARAM(@LowInd));
...Поэтому мне и нужен RichEdit.
kuksha писал(а):Но всё-же - НЕ МОГУ НАЙТИ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ lazrichview ! Как с этой штукой работать? Может надо как-то к проекту подключать, чтобы эти элементы управления увидеть???
kuksha писал(а):richmemo отказался устанавливаться... Ставил так:
Меню Пакет->открыть файл пакета (.lpk)->выбираю richmemopackage.lpk->OK->Установить
В редакторе на вкладке WSRichMemo при этом отмечена строка:
class procedure SetHideSelection(const ACustomEdit: TCustomEdit; AHideSelection: Boolean); override;
Сообщение:
C:\lazarus\components\richmemo\wsrichmemo.pas(60,21) Error: There is no method in an ancestor class to be overridden: "class TWSCustomRichMemo.SetHideSelection(const TCustomEdit, Boolean);"
kuksha писал(а):Я в Лазарусе новичок, поэтому тупой вопрос:
как вообще ведут себя доп. пакеты, если подразумевается, что у них есть контролы - они сразу добавляются в панель инструментов Лазаруса и оттуда всегда доступны или их ещё надо дополнительно в проект подключать?
kuksha писал(а):Эта ошибка исчезла, но появилась другая:
C:\Projectslazarus\richmemo\win32richmemo.pas(164,51) Error: Wrong number of parameters specified for call to "PrepareCreateWindow"
Останов во вкладке Win32RichMemo на строке 164
PrepareCreateWindow(AWinControl, AParams, Params);
PrepareCreateWindow(AWinControl, Params);
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46