Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StringGrid выделять текст, но нельзя было редактировать [D7, WinXP]


Страницы:   1 2 3

Dmitry_177 ©   (2007-07-28 19:25:00) 

Можно ли какнибудь сделать так, чтобы текст в StringGrid-е, который находится в ячейках можно было бы выделять, но нельзя было бы редактировать?


Dmitry_177   (2007-07-31 19:21:00) [1]

спас InvalidateGrid:

StringGrid1.HideEditor;
StringGrid1.Cells[1, 1] := 'fef ewfve few f ewf ewf e wf cv rt4f vr gfv erw gvreg vw wgh trvgh wtv g r vwergvrewgvvebrgvwer gvw v grw ergv wvgwgv r gvwerg re';  // любая длинная строка
Application.ProcessMessages;
StringGrid1.ShowEditor;
StringGrid1.InvalidateGrid;


Dmitry_177   (2007-07-31 18:56:00) [2]

вот так работает:
StringGrid1.HideEditor;
StringGrid1.Cells[1, 1] := 'fef ewfve few f ewf ewf e wf cv rt4f vr gfv erw gvreg vw wgh trvgh wtv g r vwergvrewgvvebrgvwer gvw v grw ergv wvgwgv r gvwerg re';  // любая длинная строка
Application.ProcessMessages;
StringGrid1.ShowEditor;


но так почему то ОЧЕНЬ редко, но бывает не все разделительный линии прорисовываются между ячейками почему то..


Lacmus   (2007-07-31 18:16:00) [3]



 StringGrid1.HideEditor;
 StringGrid1.Cells[1, 1] := 'fef ewfve few f ewf ewf e wf cv rt4f vr gfv erw gvreg vw wgh trvgh wtv g r vwergvrewgvvebrgvwer gvw v grw ergv wvgwgv r gvwerg re';  // любая длинная строка
 Application.ProcessMessages;
 StringGrid1.ShowEditor;

или

 StringGrid1.HideEditor;
 StringGrid1.Cells[1, 1] := 'fef ewfve few f ewf ewf e wf cv rt4f vr gfv erw gvreg vw wgh trvgh wtv g r vwergvrewgvvebrgvwer gvw v grw ergv wvgwgv r gvwerg re';  // любая длинная строка


Dmitry_177   (2007-07-31 18:04:00) [4]

т.е. я как понял алгоритм такой?

1. HideEditor
2. загружаем строку
3. ShowEditor

по идее должен сработать OnDrawCell..


Lacmus   (2007-07-31 17:43:00) [5]

В таблице обязательно должна быть выделена ячейка.
Можно скрыть редактор: HideEditor или EditorMode := False;


Dmitry_177   (2007-07-31 17:37:00) [6]

строка всеравно выделенной остается..


Dmitry_177   (2007-07-31 17:36:00) [7]

не помогло..


Lacmus   (2007-07-31 16:46:00) [8]

with StringGrid1 do FocusCell(Col, Row, False)


Dmitry_177   (2007-07-31 16:33:00) [9]

что-то у меня никак не получается..:(


Dmitry_177   (2007-07-31 13:43:00) [10]


> Когда ячейка выделена, показывается TInplaceEditor и OnDrawCell
> действительно не работает, возможно поможет StringGrid1.
> HideEditor, StringGrid1.ShowEditor.


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


{RASkov}   (2007-07-31 12:56:00) [11]

Оказывается, что тут еще и многострочность нужна в Гриде...)
Dmitry_177
Имхо.... ответь положительно на свой вопрос в [32]....
Иначе это изврат... тем более, что при написании нового у тебя уже многое имеется, из этой ветки хотя-бы....
Тебе нужно переопределить ИнплэйЭдит, и немного поведение самого TStringGrid.... Это, имхо, будет куда лучше, чем извращатся над уже готовым, и для других целей, компонентом....


Lacmus   (2007-07-31 12:48:00) [12]

Delphi?\Source\Vcl\Grids.pas

HideEditor, ShowEditor - это protected методы TCustomGrid


Dmitry_177   (2007-07-31 12:36:00) [13]


> возможно поможет StringGrid1.HideEditor, StringGrid1.ShowEditor.

что-то я не нашел у себя в StringGrid-е этого.. ни в свойствах ни в событиях..


Lacmus   (2007-07-31 10:58:00) [14]

>GrayFace ©   (30.07.07 22:08) [31]

Вам плохая Delphi попалась.

>Dmitry_177   (30.07.07 16:53) [30]

Когда ячейка выделена, показывается TInplaceEditor и OnDrawCell действительно не работает, возможно поможет StringGrid1.HideEditor, StringGrid1.ShowEditor.


{RASkov}   (2007-07-31 03:01:00) [15]

> [0] Dmitry_177   (28.07.07 19:25)
> Можно ли какнибудь сделать так, чтобы текст в StringGrid-
> е, который находится в ячейках можно было бы выделять, но
> нельзя было бы редактировать?

> [1] Dmitry_177   (28.07.07 19:28)
> выделять курсором имеется ввиду..


ReadOnly Грид:
procedure TForm1.FormCreate(Sender: TObject);
var C, R: Integer;
begin
 for C := 0 to StringGrid1.ColCount-1 do
  for R := 0 to StringGrid1.RowCount-1 do StringGrid1.Cells[C, R]:=Format('[%d, %d]', [C, R]);
 StringGrid1.Options:=StringGrid1.Options+[goEditing];
end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  Key:=#0;
end;


Я всю ветку внимательно не читал, поэтому сорри, если это уже не нужно....


Dmitry_177   (2007-07-30 23:23:00) [16]

GrayFace, ну а что тогда компонент свой писать?


GrayFace   (2007-07-30 22:08:00) [17]

Dmitry_177   (30.07.07 0:36) [26]
работает :)

А не должно :) Если сделать ячейку (1,0) самой большой, она будет обрубаться.
Чтобы сделать чисто, надо хранить высоты всех ячеек и выбирать максимальную при изменении текста.

Lacmus ©   (30.07.07 13:19) [27]
Так делать нельзя. Надо нормально наследоваться. У меня от такого фокуса были Exception'ы в абсолютно неожиданном месте. Когда убрал, все стало нормально.


Dmitry_177   (2007-07-30 16:53:00) [18]

я еще нашел один небольшой глюг..

если выделить так строку в ячейке, потом записать туда другую строку, например более длинную и высота ячейки не меняется.. такое ощущение что StringGrid1DrawCell вообще не стаработывает, если выделена строка..


Dmitry_177   (2007-07-30 16:38:00) [19]

работает :) Lacmus, огромнейшее тебе спасибо! :)


Dmitry_177   (2007-07-30 13:59:00) [20]


> Повторное объявление TStringGridX убрать.


откуда убрать? что-то не пойму..


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо