Редактирование Tstinggrid

  • Автор темы Fine
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

Fine

#1
Здраствуйте товарищи.

Можо компонент в TStringGrid
1. делать readonly=false
2. делать многострочный (в ячейках через ентер написать (разделить) строки) ?
Или есть другие компоненты с такими свойствами ?

Заране спасибо :)
 
P

Poseidon

#2
1) Установи в Options параметр goEditing в True.

2) Многострочные ячейки в StringGrid:
Сперва необходимо установить свойство DefaultDrawing в False. Далее, необходимо вставить следующий код в обработчик события OnDrawCell:

Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; 
                                    Col, Row: Longint; 
                                    Rect: TRect; 
                                    State: TGridDrawState); 
var 
  Line1: string; 
  Line2: string; 
  ptr: integer; 
  padding: integer; 
  hGrid: TStringGrid; 

begin 
 hGrid:= (Sender as TStringGrid); 
 ptr := Pos(';', hGrid.Cells[Col, Row]); 
 if ptr > 0 then 
 begin 
    Line1 := Copy(hGrid.Cells[Col, Row], 1, ptr - 1); 
    Line2 := Copy(hGrid.Cells[Col, Row], ptr + 1, 
                  Length(hGrid1.Cells[Col,Row]) - ptr); 
 end 
 else Line1 := hGrid.Cells[Col, Row]; 
 hGrid.Canvas.FillRect(Rect); 
 hGrid.Canvas.TextOut(Rect.Left, Rect.Top + 2, Line1); 
 if ptr > 0 then 
    hGrid.Canvas.TextOut(Rect.Left, Rect.Top - 
                         hGrid.Canvas.Font.Height + 3, Line2); 
end;
Теперь достаточно для переноса строки вставить в неё точку с запятой. Так же не забудьте изменить высоту строки так, чтобы переносы строки поместились в ячейку:

Код:
StringGrid1.RowHeights[0] := StringGrid1.DefaultRowHeight * 2;
 
Статус
Закрыто для дальнейших ответов.