powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / сместить InplaceEditor у TStringGrid (Lazarus)
11 сообщений из 11, страница 1 из 1
сместить InplaceEditor у TStringGrid (Lazarus)
    #39562906
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет ли у TStringGrid / TDrawGrid подходящего события, в котором можно задать BoundsRect у встроенного редактора (InplaceEditor) ?
Было бы удобно, если бы предусмотрели специальное событие.

Нужно для того, чтобы в одной ячейке рисовать значок и справа от него текст, который в режиме редактирования ячейки не затирает значок.
Другими словами, чтобы левая граница редактора смещалась вправо от значка.
Или я хочу странного ?

Почти получилось в событии OnGetEditText таким образом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var
  NewRect: TRect;
begin
  if StringGrid.EditorMode then
  begin
    case ACol of
      1:
      begin
        NewRect := StringGrid.InplaceEditor.BoundsRect;
        NewRect.Left := NewRect.Left + ImagesGrid.Width + 8;
        StringGrid.InplaceEditor.BoundsRect := NewRect;
      end;
    end;
  end; 


Но эффект пропадает, если сетку отсортировать кликом по заголовку .
Лазарус 1.8.0RC5
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563155
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost Writer, см property OnSelectEditor
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563158
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freedoom,

пробовал, нет эффекта.
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563193
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost WriterOnGetEditTextПродублировал в OnHeaderClick.
Вроде ничо так, но присутствует ощущение костыля.
Надеюсь, больше нигде не вылезет боком.
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563294
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost Writerпробовал, нет эффекта.
Приз Код в студию
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563306
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreedoomКод в студиюну вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TForm1.StringGridSelectEditor(Sender: TObject; aCol, aRow: Integer;
  var Editor: TWinControl);
var
  NewRect: TRect;
begin
  NewRect := Editor.BoundsRect;
  NewRect.Left := NewRect.Left + ImagesGrid.Width + 8;
  Editor.BoundsRect := NewRect;
end;
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563355
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost Writer, не совсем правильное понимание события. См. исходники:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
procedure TCustomGrid.SelectEditor;
var
  aEditor: TWinControl;
begin
  {$ifdef DbgGrid}
  DebugLnEnter('TCustomGrid.SelectEditor INIT');
  {$endif}
  aEditor := GetDefaultEditor(Col);
  if EditingAllowed(FCol) and Assigned(OnSelectEditor) then begin
    // in some situations there are only non-selectable cells
    // if goAlwaysShowEditor is on set initially editor to nil,
    // user can modify this value in OnSelectEditor if needed
    if not SelectCell(FCol,FRow) then
      aEditor:=nil;
    OnSelectEditor(Self, fCol, FRow, aEditor);
  end;
  if aEditor<>Editor then
    Editor := aEditor;
  if Assigned(Editor) and not Assigned(Editor.Popupmenu) then
    Editor.PopupMenu := PopupMenu;
  {$ifdef DbgGrid}
  DebugLnExit('TCustomGrid.SelectEditor END');
  {$endif}
end;


Смысл события - назначить свой редактор. Реализацию и перекрываемые методы редактора лучше смотреть в grids.pas
Можно реализовать свой, наследовав от TStringCellEditor
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563357
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freedoomне совсем правильное понимание событияу меня ? а кто мне это советовал ?
FreedoomGhost Writer, см property OnSelectEditor я вчера справочку прочитал, так что с пониманием всё нормально http://wiki.freepascal.org/Grids_Reference_Page/ru#Grid_Cell_Editors
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563364
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost Writerя вчера справочку прочитал, так что с пониманием всё нормально http://wiki.freepascal.org/Grids_Reference_Page/ru#Grid_Cell_Editors Предлагаю более подробно рассмотреть приведённую в тексте ссылку
Example: How to set a custom cell editor
See lazarus/examples/gridexamples/gridcelleditor/ gridcelleditor.lpi
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563371
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freedoom,

ясно, спасибо.
Получается, что стандартные редакторы грид перемещает сам, а инородные надо ручками.

При сортировке тоже косяк: ComboBox1 остался на месте, а ячейка под ним уже другая. Тоже придется OnHeaderClick корректировать позицию.

И вторая бяка: заменил ComboBox на TEdit, BorderStyle := bsNone и текст прилип к верхнему краю. А выравнивания по вертикали нет.

Наверно выкину StringGrid
...
Рейтинг: 0 / 0
сместить InplaceEditor у TStringGrid (Lazarus)
    #39563397
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost WriterTEdit, BorderStyle := bsNone и текст прилип к верхнему краю. А выравнивания по вертикали нет.
Попробуйте TEdit.Height := TStringGrid.DefaultRowHeight; Так же можно поэксперементировать с drawgrid
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / сместить InplaceEditor у TStringGrid (Lazarus)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]