Как опустить букву ниже сстроки?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как опустить букву ниже сстроки?

Сообщение kuksha » 19.06.2010 01:03:32

Как написать букву ниже уровня строки?
Например чтобы химическая формула H2O была правильно написана?

(в Дельфи колдовал с помощью нескольких свойств LowInd. , но в Лазарусе это не прокатывает...)
kuksha
новенький
 
Сообщения: 28
Зарегистрирован: 10.01.2010 20:04:51

Re: Как опустить букву ниже сстроки?

Сообщение скалогрыз » 19.06.2010 01:15:31

решение времён Turbo Pascal-a, модернизированное под Лазарус (Делфи)

Код: Выделить всё
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;
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как опустить букву ниже сстроки?

Сообщение kuksha » 19.06.2010 09:43:41

Прошу прощения - плохо объяснил что нужно...
Посмотрел как я это в дельфи делал и понял, что нужен аналог RichEdit (нужно копировать из этого элемента, редактирование не нужно). Есть в Лазарусе такой? Если есть, то как называется и как в нём выше-ниже строки буквы расставлять?

Добавлено спустя 1 час 1 минуту 9 секунд:
Так, нашёл lazrichview - редактирование не обещают, ну оно мне и не надо...
Установил, лазарус пересобрался и перезапустился.
А дальше то что?
Демка не работает (RVDemo.lpr(4,3) Fatal: Can't find unit Interfaces used by RVDemo)
Новые элементы и вкладки в панели инструментов не появились... Где элемент RichEdit взять?
kuksha
новенький
 
Сообщения: 28
Зарегистрирован: 10.01.2010 20:04:51

Re: Как опустить букву ниже сстроки?

Сообщение скалогрыз » 19.06.2010 10:49:43

kuksha писал(а):Посмотрел как я это в дельфи делал и понял, что нужен аналог RichEdit (нужно копировать из этого элемента, редактирование не нужно). Есть в Лазарусе такой? Если есть, то как называется и как в нём выше-ниже строки буквы расставлять?

т.е. нужно текст скопировать в буфер обмена?! а куда потом этот буфер отправиться?

можно ли посмотреть на делфи тот код, который меняет регистр на подстрочный?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как опустить букву ниже сстроки?

Сообщение Nik » 19.06.2010 10:51:59

Может вам вывод на основе HTML проще сделать? Взять HTMLPanel, а в коде нижний/верхний индекс просто делаются -
Код: Выделить всё
< sub > / < sup >
.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Как опустить букву ниже сстроки?

Сообщение kuksha » 19.06.2010 11:08:23

Вот кусок дельфи-кода, но я за давностью лет не могу сходу сказать что я тут наколбасил...
Form1.Kiril - элемент TTntRichView из набора TNTUnicode
Код: Выделить всё
         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));

А как работает можно посмотреть в экзешнике http://krina.land.ru/Titlo/Titlo_0.12.2.zip - при копировании кириллических записей из этой проги в Word, оформление текста полностью сохраняется.
Поэтому мне и нужен RichEdit.
Может этот компонент надо как-то к проекту подключить? НЕ МОГУ НАЙТИ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ lazrichview !

Кстати, HTMLPanel я тоже не вижу... - где она?
Последний раз редактировалось kuksha 19.06.2010 11:17:13, всего редактировалось 1 раз.
kuksha
новенький
 
Сообщения: 28
Зарегистрирован: 10.01.2010 20:04:51

Re: Как опустить букву ниже сстроки?

Сообщение скалогрыз » 19.06.2010 11:15:12

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.

Здесь ты меняешь свойства шрифта для выделенного текста: его размер и отступ, используя WinAPI :)

попробуй RichMemo

компонент в атаче, а описание (чуть устаревшее) здесь
У вас нет необходимых прав для просмотра вложений в этом сообщении.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как опустить букву ниже сстроки?

Сообщение kuksha » 19.06.2010 11:20:47

Спасибо, вечером вернусь - посижу почитаю. Может этого и хватит...

Но всё-же - НЕ МОГУ НАЙТИ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ lazrichview ! Как с этой штукой работать? Может надо как-то к проекту подключать, чтобы эти элементы управления увидеть???
kuksha
новенький
 
Сообщения: 28
Зарегистрирован: 10.01.2010 20:04:51

Re: Как опустить букву ниже сстроки?

Сообщение скалогрыз » 19.06.2010 11:26:45

kuksha писал(а):Но всё-же - НЕ МОГУ НАЙТИ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ lazrichview ! Как с этой штукой работать? Может надо как-то к проекту подключать, чтобы эти элементы управления увидеть???


я не знаю, не приходилось с lazrichview работать!
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как опустить букву ниже сстроки?

Сообщение kuksha » 19.06.2010 16:33:30

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);"


lazrichview устанавливал так же, поставился сам без ошибок, попутно пересобрав Лазарус и перезапустив его в конце.

Я в Лазарусе новичок, поэтому тупой вопрос:
как вообще ведут себя доп. пакеты, если подразумевается, что у них есть контролы - они сразу добавляются в панель инструментов Лазаруса и оттуда всегда доступны или их ещё надо дополнительно в проект подключать?
kuksha
новенький
 
Сообщения: 28
Зарегистрирован: 10.01.2010 20:04:51

Re: Как опустить букву ниже сстроки?

Сообщение скалогрыз » 19.06.2010 17:59:33

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);"

всё нормально. проблема в том, что текущая сборка richmemo работает только с svn версией лазаруса.
чтобы компилировался в объявлении SetHideSelection замени override на virtual

после сборки RichMemo появится в Common Controls

kuksha писал(а):Я в Лазарусе новичок, поэтому тупой вопрос:
как вообще ведут себя доп. пакеты, если подразумевается, что у них есть контролы - они сразу добавляются в панель инструментов Лазаруса и оттуда всегда доступны или их ещё надо дополнительно в проект подключать?

они сразу должны быть на панели компонентов.
возможно он добавился в какую-то вкладку.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как опустить букву ниже сстроки?

Сообщение kuksha » 19.06.2010 19:43:47

Угу, понял, спасибо.

Добавлено спустя 12 минут 31 секунду:
неа, всё равно не собирается твой пакет...
теперь лазарус не смог найти win32richmemo.pas, который вложен в каталог win32. Куда прописать ещё один путь я так и не понял, поэтому просто вытащил win32richmemo.pas и win32richmemoproc.pas на уровень выше(может я и не прав...). Эта ошибка исчезла, но появилась другая:
C:\Projectslazarus\richmemo\win32richmemo.pas(164,51) Error: Wrong number of parameters specified for call to "PrepareCreateWindow"
Останов во вкладке Win32RichMemo на строке 164
PrepareCreateWindow(AWinControl, AParams, Params);
kuksha
новенький
 
Сообщения: 28
Зарегистрирован: 10.01.2010 20:04:51

Re: Как опустить букву ниже сстроки?

Сообщение скалогрыз » 19.06.2010 20:11:18

kuksha писал(а):Эта ошибка исчезла, но появилась другая:
C:\Projectslazarus\richmemo\win32richmemo.pas(164,51) Error: Wrong number of parameters specified for call to "PrepareCreateWindow"
Останов во вкладке Win32RichMemo на строке 164
PrepareCreateWindow(AWinControl, AParams, Params);

лазарь 0.9.28?

как раз в строке 164 (чуть выше оставлен комментарий), который советует закомментировать ошибочную строку и раскомментировать
Код: Выделить всё
PrepareCreateWindow(AWinControl, Params);


К сожалению, т.к. в Лазаре не предусмотренные $define для версий (умышленно!), автоматизировать такие ошибки не удаётся, и компонент нужно чуточку "дорабатывать напильником"
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как опустить букву ниже сстроки?

Сообщение kuksha » 19.06.2010 20:28:13

вот я балбес... нет бы прочитать что там написано...

Теперь вот такая картина:
"Compiling package richmemopackage 1.0" - действие завершено
Recompiling RichMemoFactory, checksum changed for Win32RichMemo
C:\lazarus\components\richmemo\richmemofactory.pas(78,12) Fatal: Can't find unit RichMemoFactory used by richmemopackage
Останов на вкладке RichMemoFactory в пустой строке 36, после конечного end.
kuksha
новенький
 
Сообщения: 28
Зарегистрирован: 10.01.2010 20:04:51

Re: Как опустить букву ниже сстроки?

Сообщение скалогрыз » 19.06.2010 21:53:45

1-х) При компиляции пакета, в директории с пакетом создаётся директория lib. Попробуй её удалить, и снова установить пакет.

2-х) если при переносе файлов из Win32 на верхний уровень, старые файлы ты не удалил (из Win32), то попробуй их удалить... хотя переносить из Win32 файлы не стоило
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45

Рейтинг@Mail.ru