Вопросы по LCL
Модератор: Модераторы
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Я для совместной работы писал в Delphi, а потом портировал на Lazarus. Потом забил ^_^
Brainenjii
Тоже пока забъю. После установки исходников FPC - delphi вроде и ненужен))
Как добиться правильной ориентации разделителей на вертикальном TToolBar? вообще, как сказать ToolBar`у что он вертикальный? ато привык к горизондальному положению
Тоже пока забъю. После установки исходников FPC - delphi вроде и ненужен))
Как добиться правильной ориентации разделителей на вертикальном TToolBar? вообще, как сказать ToolBar`у что он вертикальный? ато привык к горизондальному положению
т.е. TToolBar вертикальность не поддерживает
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Или не заморачиваться на разделители и делать пропуски ^_^
>>Официально - нет
жалко, ну да хрен с ним.
настала очередь TMemo:
1) как сделать автоскролинг?
2) как убрать курсор оставив возможность выделения?
3) как убрать последнюю пустую строку? хз откуда она берется, добавляю строки:
в конце появляется пустая строка в которой стоит курсор. в winapi такого небыло
жалко, ну да хрен с ним.
настала очередь TMemo:
1) как сделать автоскролинг?
2) как убрать курсор оставив возможность выделения?
3) как убрать последнюю пустую строку? хз откуда она берется, добавляю строки:
Код: Выделить всё
Lines.Add(systoutf8(s))в конце появляется пустая строка в которой стоит курсор. в winapi такого небыло
1) как сделать автоскролинг?
Свойство ScrollBars.
2) как убрать курсор оставив возможность выделения?
Сомневаюсь, что это возможно сделать, кроме как через API. Со всеми вытекающими.
Да и то - не помню.
3) как убрать последнюю пустую строку? хз откуда она берется, добавляю строки:
Разве так надо убирать?
Например, вручную: with memoSpecialNotes do Lines[Lines.Count - 1] := Lines[Lines.Count - 1] + #0;
2) как убрать курсор оставив возможность выделения?
Код: Выделить всё
Memo1.ReadOnly:=True; Это подойдёт?
>>Разве так надо убирать?
Убирать так ненадо, я интересуюсь откуда эта пустая строка и как от нее избавиться. я ее не добавлял
>>Memo1.ReadOnly:=True;
Спасибо. курсор остается, просто не редактируется - пусть так и будет
Добавлено спустя 5 часов 44 минуты 29 секунд:
Еще возникло 2 момента:
1 - Портирую инспектор объектов.
Перед портированием рисовался по WM_PAINT на аналоге TForm. перекинул на LCLный TPanel отрисовку запихнул в
Чем заменить GDIшные функции чтоб было кроссплатформенно? или лучше использовать чтонибудь типа TImage или TPaintBox?
2 - Как я понял
вызывается уже после рисования рисования стандартной клиентской области. Как сказать LCL что нужно рисовать только бордюр, если клиентскую область я планирую полностью рисовать сам?
Убирать так ненадо, я интересуюсь откуда эта пустая строка и как от нее избавиться. я ее не добавлял
>>Memo1.ReadOnly:=True;
Спасибо. курсор остается, просто не редактируется - пусть так и будет
Добавлено спустя 5 часов 44 минуты 29 секунд:
Еще возникло 2 момента:
1 - Портирую инспектор объектов.
Перед портированием рисовался по WM_PAINT на аналоге TForm. перекинул на LCLный TPanel отрисовку запихнул в
Код: Выделить всё
procedure paint;override;Чем заменить GDIшные функции чтоб было кроссплатформенно? или лучше использовать чтонибудь типа TImage или TPaintBox?
2 - Как я понял
Код: Выделить всё
procedure paint;override;вызывается уже после рисования рисования стандартной клиентской области. Как сказать LCL что нужно рисовать только бордюр, если клиентскую область я планирую полностью рисовать сам?
1 - Портирую инспектор объектов.
Чем заменить GDIшные функции чтоб было кроссплатформенно? или лучше использовать чтонибудь типа TImage или TPaintBox?
Ну, наверное, лучше. А какие функции? Возможностей канвы не хватает?
вызывается уже после рисования рисования стандартной клиентской области. Как сказать LCL что нужно рисовать только бордюр, если клиентскую область я планирую полностью рисовать сам?
На TPanel? Судя по коду метода Paint, достаточно установить Caption в ''.
>>Ээээ, а что вы переписываете, если не секрет?
инспектор - громко сказано)). лучше скажу "чем-то похожий на инспектор"
viewtopic.php?f=10&t=5917
>>Ну, наверное, лучше. А какие функции? Возможностей канвы не хватает?
для "инспектора" вполне хватит)). Но сейчас сделано на GDI, хочется малой кровью получить кроссплатформенность. edit: по своей нубости думал что canvas есть только у TImage и иже с ним. на него и перенесу.
>>На TPanel? Судя по коду метода Paint, достаточно установить Caption в ''.
нет, при пустом Paint`е (без inherited) панель выглядит вполне нормально, просто без Caption. + при большой перкрисовке в paint сильно заметно мерцание.
инспектор - громко сказано)). лучше скажу "чем-то похожий на инспектор"
viewtopic.php?f=10&t=5917
>>Ну, наверное, лучше. А какие функции? Возможностей канвы не хватает?
для "инспектора" вполне хватит)). Но сейчас сделано на GDI, хочется малой кровью получить кроссплатформенность. edit: по своей нубости думал что canvas есть только у TImage и иже с ним. на него и перенесу.
>>На TPanel? Судя по коду метода Paint, достаточно установить Caption в ''.
нет, при пустом Paint`е (без inherited) панель выглядит вполне нормально, просто без Caption. + при большой перкрисовке в paint сильно заметно мерцание.
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? Или нет?
>>А инспектор у вас полностью рисуется? Т.е., все поля или это контролы, которые могут фокус принимать?
Инспектор - картинка, рисуется полностью, по кликам добавляются-убираются контролы редактирования, либо откр.-закр. узлы.
>>Это во-первых. Необязательно прорисовывать всё, я так думаю. Может, достаточно только то, что поменялось?
ИМХО это лишнее, на инспекторе не оправдано (итак быстро ресуется), OGL если небыло изменений восстанавливается текстурами, без перерисовки примитивов - тоже быстро, а если были изменения, то проще перерисовать всё
Мельканье от того что на входе в paint фон контрола уже нарисован, видимо по WM_ERASEBACKGROUND.
>>В-третьих, у меня есть кое-какой код для GL из той программки и иже с ним.
>>Хотя, код у меня неахти, конечно - хреновый. :- К тому же на c++, и, в основном не кросс.
Интересует кроссплатформенная инициализация OGL.
>>А вы используете "обычный" OpenGL? Без всяких "карточных" наворотов и без VBO? Или нет?
да, всё просто, без наворотов. Их особо некуда приделать - геоментрия может меняться вся. разве что к большим text`ам-mtext`ам.
из "наворотов" только отсечение невидимой геометрии, потом glBegin и поехали...
Инспектор - картинка, рисуется полностью, по кликам добавляются-убираются контролы редактирования, либо откр.-закр. узлы.
>>Это во-первых. Необязательно прорисовывать всё, я так думаю. Может, достаточно только то, что поменялось?
ИМХО это лишнее, на инспекторе не оправдано (итак быстро ресуется), OGL если небыло изменений восстанавливается текстурами, без перерисовки примитивов - тоже быстро, а если были изменения, то проще перерисовать всё
Мельканье от того что на входе в paint фон контрола уже нарисован, видимо по WM_ERASEBACKGROUND.
>>В-третьих, у меня есть кое-какой код для GL из той программки и иже с ним.
>>Хотя, код у меня неахти, конечно - хреновый. :- К тому же на c++, и, в основном не кросс.
Интересует кроссплатформенная инициализация OGL.
>>А вы используете "обычный" OpenGL? Без всяких "карточных" наворотов и без VBO? Или нет?
да, всё просто, без наворотов. Их особо некуда приделать - геоментрия может меняться вся. разве что к большим text`ам-mtext`ам.
из "наворотов" только отсечение невидимой геометрии, потом glBegin и поехали...
Мельканье от того что на входе в 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.
И пример, естественно.
Я не знаю что такое, не пользовался, но так, к сведению.
