Вопросы по LCL

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

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

Re: Вопросы по LCL

Сообщение Brainenjii » 17.06.2010 07:52:03

Я для совместной работы писал в Delphi, а потом портировал на Lazarus. Потом забил ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Вопросы по LCL

Сообщение zub » 17.06.2010 11:42:05

Brainenjii
Тоже пока забъю. После установки исходников FPC - delphi вроде и ненужен))

Как добиться правильной ориентации разделителей на вертикальном TToolBar? вообще, как сказать ToolBar`у что он вертикальный? ато привык к горизондальному положению
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Вопросы по LCL

Сообщение Nik » 18.06.2010 00:11:15

Вертикальным TToolBar сделать просто - Align=alLeft и Width = Button.Width. Но с разделителями будут проблемы - они не "знают", что панель может быть вертикальной.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Вопросы по LCL

Сообщение zub » 18.06.2010 00:34:31

т.е. TToolBar вертикальность не поддерживает
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Вопросы по LCL

Сообщение Nik » 18.06.2010 07:38:41

Официально - нет, насколько я знаю. Можно поэкспериментировать с описанным мной выше способом (вместо разделителей использовать кнопки с иконками в виде горизонтальной черты).
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Вопросы по LCL

Сообщение Brainenjii » 18.06.2010 08:05:23

Или не заморачиваться на разделители и делать пропуски ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Вопросы по LCL

Сообщение zub » 18.06.2010 13:35:12

>>Официально - нет
жалко, ну да хрен с ним.

настала очередь TMemo:

1) как сделать автоскролинг?
2) как убрать курсор оставив возможность выделения?
3) как убрать последнюю пустую строку? хз откуда она берется, добавляю строки:
Код: Выделить всё
Lines.Add(systoutf8(s))

в конце появляется пустая строка в которой стоит курсор. в winapi такого небыло
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Вопросы по LCL

Сообщение А.Н. » 18.06.2010 14:21:06

1) как сделать автоскролинг?

Свойство ScrollBars.

2) как убрать курсор оставив возможность выделения?

Сомневаюсь, что это возможно сделать, кроме как через API. Со всеми вытекающими.
Да и то - не помню. :)

3) как убрать последнюю пустую строку? хз откуда она берется, добавляю строки:

Разве так надо убирать?
Например, вручную: with memoSpecialNotes do Lines[Lines.Count - 1] := Lines[Lines.Count - 1] + #0;
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Вопросы по LCL

Сообщение qivi » 18.06.2010 17:19:33

2) как убрать курсор оставив возможность выделения?

Код: Выделить всё
Memo1.ReadOnly:=True;

Это подойдёт?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Вопросы по LCL

Сообщение zub » 18.06.2010 17:24:19

>>Разве так надо убирать?
Убирать так ненадо, я интересуюсь откуда эта пустая строка и как от нее избавиться. я ее не добавлял

>>Memo1.ReadOnly:=True;
Спасибо. курсор остается, просто не редактируется - пусть так и будет

Добавлено спустя 5 часов 44 минуты 29 секунд:
Еще возникло 2 момента:
1 - Портирую инспектор объектов.
Перед портированием рисовался по WM_PAINT на аналоге TForm. перекинул на LCLный TPanel отрисовку запихнул в
Код: Выделить всё
procedure paint;override;

Чем заменить GDIшные функции чтоб было кроссплатформенно? или лучше использовать чтонибудь типа TImage или TPaintBox?

2 - Как я понял
Код: Выделить всё
procedure paint;override;

вызывается уже после рисования рисования стандартной клиентской области. Как сказать LCL что нужно рисовать только бордюр, если клиентскую область я планирую полностью рисовать сам?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Вопросы по LCL

Сообщение А.Н. » 18.06.2010 23:18:57

1 - Портирую инспектор объектов.

:shock: Ээээ, а что вы переписываете, если не секрет?

Чем заменить GDIшные функции чтоб было кроссплатформенно? или лучше использовать чтонибудь типа TImage или TPaintBox?

Ну, наверное, лучше. А какие функции? Возможностей канвы не хватает?

вызывается уже после рисования рисования стандартной клиентской области. Как сказать LCL что нужно рисовать только бордюр, если клиентскую область я планирую полностью рисовать сам?

На TPanel? Судя по коду метода Paint, достаточно установить Caption в ''. :)
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Вопросы по LCL

Сообщение zub » 18.06.2010 23:33:48

>>Ээээ, а что вы переписываете, если не секрет?
инспектор - громко сказано)). лучше скажу "чем-то похожий на инспектор"
viewtopic.php?f=10&t=5917

>>Ну, наверное, лучше. А какие функции? Возможностей канвы не хватает?
для "инспектора" вполне хватит)). Но сейчас сделано на GDI, хочется малой кровью получить кроссплатформенность. edit: по своей нубости думал что canvas есть только у TImage и иже с ним. на него и перенесу.

>>На TPanel? Судя по коду метода Paint, достаточно установить Caption в ''.
нет, при пустом Paint`е (без inherited) панель выглядит вполне нормально, просто без Caption. + при большой перкрисовке в paint сильно заметно мерцание.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Вопросы по LCL

Сообщение А.Н. » 19.06.2010 11:28:37

viewtopic.php?f=10&t=5917

Интересная штука.

для "инспектора" вполне хватит)). Но сейчас сделано на GDI, хочется малой кровью получить кроссплатформенность.

Так, Canvas кроссплатформенный, вроде как. Во всяких хп он работает через GDI.
А остальное у вас OpenGL, который, тем более...

думал что canvas есть только у TImage и иже с ним. на него и перенесу.

А инспектор у вас полностью рисуется? Т.е., все поля или это контролы, которые могут фокус принимать?

нет, при пустом Paint`е (без inherited) панель выглядит вполне нормально, просто без Caption. + при большой перкрисовке в paint сильно заметно мерцание.

Я как-то секундомерчик делал на GDI (потом на GL переделал). С долями.
Чтобы не мерцало сделал перерисовку только части экрана.
Каждую долю секунды, например, только квадрат, содержащий верхний "маленький таймер".
Это во-первых. Необязательно прорисовывать всё, я так думаю. Может, достаточно только то, что поменялось?
Во-вторых, у TPanel метод Paint всего лишь:
1. Рисует бордюр и текст. Собственно, весь код для бордюра из TCustomMemo.Paint:
Код: Выделить всё
  ARect := GetClientRect;
  if BevelOuter <> bvNone then
    Canvas.Frame3d(ARect, BevelWidth, BevelOuter);

  if BevelInner <> bvNone then
  begin
    if BorderWidth > 0 then
      InflateRect(ARect, -BorderWidth, -BorderWidth);
    Canvas.Frame3d(ARect, BevelWidth, BevelInner);
  end;

2. Выводит Caption.
3. Вызывает OnPaint.
Это, думаю, возможно и самостоятельно сделать.

В-третьих, у меня есть кое-какой код для GL из той программки и иже с ним.
Хотя, код у меня неахти, конечно - хреновый. :- К тому же на c++, и, в основном не кросс.
Но могу поделиться или попробовать помочь, если, мало ли, что нужно (хотя я сомневаюсь, что нужно).

Добавлено спустя 4 минуты 16 секунд:
А вы используете "обычный" OpenGL? Без всяких "карточных" наворотов и без VBO? Или нет?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Вопросы по LCL

Сообщение zub » 19.06.2010 12:33:40

>>А инспектор у вас полностью рисуется? Т.е., все поля или это контролы, которые могут фокус принимать?
Инспектор - картинка, рисуется полностью, по кликам добавляются-убираются контролы редактирования, либо откр.-закр. узлы.

>>Это во-первых. Необязательно прорисовывать всё, я так думаю. Может, достаточно только то, что поменялось?
ИМХО это лишнее, на инспекторе не оправдано (итак быстро ресуется), OGL если небыло изменений восстанавливается текстурами, без перерисовки примитивов - тоже быстро, а если были изменения, то проще перерисовать всё
Мельканье от того что на входе в paint фон контрола уже нарисован, видимо по WM_ERASEBACKGROUND.

>>В-третьих, у меня есть кое-какой код для GL из той программки и иже с ним.
>>Хотя, код у меня неахти, конечно - хреновый. :- К тому же на c++, и, в основном не кросс.
Интересует кроссплатформенная инициализация OGL.

>>А вы используете "обычный" OpenGL? Без всяких "карточных" наворотов и без VBO? Или нет?
да, всё просто, без наворотов. Их особо некуда приделать - геоментрия может меняться вся. разве что к большим text`ам-mtext`ам.
из "наворотов" только отсечение невидимой геометрии, потом glBegin и поехали...
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Вопросы по LCL

Сообщение А.Н. » 19.06.2010 22:12:20

Мельканье от того что на входе в paint фон контрола уже нарисован, видимо по WM_ERASEBACKGROUND.

Может. Вроде-бы есть то-ли свойство, то-ли параметр окна, запрещающий стирать фон?
Свойство компонента, наверное, потому что, вроде бы, винда только сообщение посылает, а фон приходилось самостоятельно заполнять.
Хотя, TPanel - это ведь стандартный контрол...

Интересует кроссплатформенная инициализация OGL.

У меня только под window$.
Fm_hRC = wglCreateContext(Fm_hDC);
wglMakeCurrent(Fm_hDC, Fm_hRC);
И т.д. :(
Но под винду, думаю смысла не имеет, т.к. и так всё ясно.
Есть небольшая серия статей, в т.ч. и про инициализацию под Linux (ну, вообще, - под X):
http://www.mirgames.ru/articles/opengl/linux_fpc_1.html
По-идее, проблем возникнуть не должно.

Добавлено спустя 10 минут 29 секунд:
OGL если небыло изменений восстанавливается текстурами, без перерисовки примитивов - тоже быстро

Эээ, а это как?

да, всё просто, без наворотов. Их особо некуда приделать - геоментрия может меняться вся. разве что к большим text`ам-mtext`ам.

У меня тоже простая прорисовка. Просто ради изучения. Но VBO легче, удобнее и быстрее.
http://www.mirgames.ru/articles/opengl/vbo.html
Минус в том, что это расширение. Хотя, поддерживается наверняка всеми картами.
Может, если время будет, своё тоже перепишу. Правда, придётся слишком много переделывать... :(

из "наворотов" только отсечение невидимой геометрии, потом glBegin и поехали...

Так, вроде, это и не наворот, а стандартная функция.
Могу привести свою "начальную настройку", если надо. Я наотключал всякой фигни.
Уж не помню что для чего. %-)

Добавлено спустя 51 минуту 24 секунды:
Кстати, в lazarus/components/opengl есть кроссплатформенные компоненты для работы с OpenGL.
И пример, естественно.
Я не знаю что такое, не пользовался, но так, к сведению.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru