Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2011, 15:44   #1
Nightmareterrible
 
Регистрация: 18.07.2010
Сообщений: 5
По умолчанию DBGridEh. Перенос строки в режиме редактирования

Здравствуйте, уважаемые форумчане.
Совсем недавно начал использовать этот замечательный компонент и не успел к нему ещё привыкнуть.
Посему возникла трудность:
Необходимо переносить длинную строку. Устанавливаю свойство DBGridEh.RowHeight в 50, для колонки естественно WordWrap. При клике на ячейку в момент перехода в режим редактирования всё отображается нормально, строки переносятся. Однако, если нажимаем Enter, или, скажем, F2, то строка переноситься не желает - отображается текст только в одну строку.
В событии OnKeyDown стоит обработчик :
Код:
if Key = 13 then
begin
  if not(dghEnterAsTab in DBGridEh.OptionsEh) then
    DBGridEh.OptionsEh := DBGridEh.OptionsEh + [dghEnterAsTab];

  if not DBGridEh.EditorMode then
  begin
    DBGridEh.EditorMode := true;
    Key:=0;
  end;
end;
Помогите, пожалуйста, решить сложившуюся проблему.

PS. Ещё один вопрос, чтобы не создавать новую тему:
Что быстрее: метод Locate или установка RecNo в датасете?
Nightmareterrible вне форума Ответить с цитированием
Старый 05.10.2011, 22:47   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Может версия EhLib меньше 4.х? В 4 не наблюдается такого эффекта.
Да и с установками свойств понакручено, видимо.
Зачем, например, каждый раз при нажатии Enter проверять установлен ли в Options элемент dghEnterAsTab? Какой в этом великий смысл? Не проще ли установить его один раз при разработке в True и забыть.
Установка EditorMode тоже ничего не дает. Достаточно в Options присвоить элементу dgEditing значение True, dgAlwaysShowEditor = True и будет то же самое.

Чтобы строки переносились нужно значение RowLines выставить в 2 (или больше), а значение RowHeight в этом случае просто добавляется к той высоте, которую имеют эти две строки (здесь RowHeight как корректировка высоты).
Ширина колонки нужно выставить больше или меньше ширины по умолчанию, т.е <> 64.
Тогда WordWrap здесь и роли, собственно, не будет играть - DbGridEh все равно перенесет строку по словам, если она не помещается в отведенную ширину. Причем, как в режиме отображения, так и в режиме редактирования.

С RecNo можно промахнуться. Зависит от типа СУБД.
Если СУБД "настольная", то можно использовать RecNo, если SQL'вская, то лучше не применять.
Прик вне форума Ответить с цитированием
Старый 06.10.2011, 09:16   #3
Nightmareterrible
 
Регистрация: 18.07.2010
Сообщений: 5
По умолчанию

Попытался установить RowLines = 3, но это не дало требуемого результата.

Версия EhLib 5.02.

К сожалению, установка свойства EditorMode необходима, в совокупности с Key := 0. Нужно, чтобы при первом нажатии Enter начиналось редактирование ячейки, а уже потом переход к следующим. Если не устанавливать это свойство и не обнулять Key, то при нажатии Enter будет переведён фокус на следующую ячейку.

Возможно, с настройками действительно перекрутил, но создавать новый объект желания нет. Привожу настройки (взял из DFM модуля, так проще).
Код:
object DBGridEh1: TDBGridEh
    Left = 8
    Top = 79
    Width = 796
    Height = 188
    AllowedOperations = [alopUpdateEh, alopDeleteEh, alopAppendEh]
    Anchors = [akLeft, akTop, akRight, akBottom]
    DataSource = DataSourcePrincing
    EvenRowColor = clWindow
    Flat = False
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -13
    Font.Name = 'Tahoma'
    Font.Style = []
    FooterColor = clWindow
    FooterFont.Charset = DEFAULT_CHARSET
    FooterFont.Color = clWindowText
    FooterFont.Height = -13
    FooterFont.Name = 'Tahoma'
    FooterFont.Style = []
    FrozenCols = 2
    OddRowColor = clInfoBk
    Options = [dgEditing, dgTitles, dgIndicator, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit]
    OptionsEh = [dghFixed3D, dghHighlightFocus, dghClearSelection, dghDialogFind, dghExtendVertLines]
    ParentFont = False
    RowDetailPanel.Color = clBtnFace
    TabOrder = 4
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
    UseMultiTitle = True
    OnCellClick = DBGridEh1CellClick
    OnColEnter = DBGridEh1ColEnter
    OnColExit = DBGridEh1ColExit
    OnDblClick = DBGridEh1DblClick
    OnDrawDataCell = DBGridEh1DrawDataCell
    OnDataHintShow = DBGridEh1DataHintShow
    OnEnter = DBGridEh1Enter
    OnExit = DBGridEh1Exit
    OnKeyDown = DBGridEh1KeyDown
  end
Nightmareterrible вне форума Ответить с цитированием
Старый 06.10.2011, 10:23   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
К сожалению, установка свойства EditorMode необходима, в совокупности с Key := 0. Нужно, чтобы при первом нажатии Enter начиналось редактирование ячейки, а уже потом переход к следующим. Если не устанавливать это свойство и не обнулять Key, то при нажатии Enter будет переведён фокус на следующую ячейку.
Такой же эффект, но более удобный, можно получить, если просто включить в опции dghEnterAsTab и dgAlwaysShowEditor (с dgEditing, разумеется).

И в DFM что-то не видно установленных RowLines и RowHeight.
Установки из приведенного DFM (добавлены только RowLines и RowHeight) упомянутого артефакта в работе DBGridEh не дали.
Может быть мы о разном???
А может быть строки в БД с символами разделителями строк (#13#10)?

---
На картинке фрагмент DbGridEh, где есть режимы отображения и редактирования с разбивкой длинного текста на строки.
Изображения
Тип файла: png 001.png (8.3 Кб, 267 просмотров)

Последний раз редактировалось Прик; 06.10.2011 в 10:40. Причина: Картинка
Прик вне форума Ответить с цитированием
Старый 06.10.2011, 12:09   #5
Nightmareterrible
 
Регистрация: 18.07.2010
Сообщений: 5
По умолчанию

Спасибо большое! dgAlwaysShowEditor действительно помог.
Поскольку мне, на самом деле, не нужно, чтобы постоянно был режим редактирования, вставил добавление опции в событие DBGridEh.OnKeyDown и удаление опции в событии DataSet.BeforeScroll.
Nightmareterrible вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взять данные из ячейки компонента DBGridEh в режиме [dsInsert] AndreyK БД в Delphi 0 16.05.2011 16:34
DBGridEh: перенос строки в полях String М_Виктор Компоненты Delphi 2 23.03.2010 14:04
TWebBrowser - убрать Border при режиме редактирования RIO Общие вопросы Delphi 0 05.01.2010 00:53
ошибка база данных не находится в режиме вставки или редактирования samouelson БД в Delphi 2 17.12.2009 00:24
таблица не в режиме редактирования. что делать? Mitron БД в Delphi 5 12.05.2007 11:06