![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
StringGrid выделять текст, но нельзя было редактировать [D7, WinXP]
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 убрать.
откуда убрать? что-то не пойму..