![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Народ! Создал в Stringgrid 1 фиксированную строку. При работе с программой мне нужно устанавливать общее количество строк равное 1. При этом Delphi убирает фиксированную строку и пишет что "количество фикс. строк не может быть меньше общего количества строк". Возможно ли это обойти и как?
2 вопрос: есть ли у Stringgrid готовая функция, которая возвращяет индекс строки или индекс столбца в которой(или котором) содержится данная подстрока(чтобы не приходилось делать цикл: Код:
for i:=1 to RowCount-1 do if Cells[1,i]='Подстрока' then ...; Код:
Application. ? :='Описание';//Не Title! Последний раз редактировалось Sahan911, 08.08.2011 в 20:45. |
|
#2
|
||||
|
||||
|
1. Если создал фиксированную строку, не забывай учитывать её в общем количестве: Нужна 1 считай = 2. То же касается и колонок, при имеющейся фиксированной колонке.
2. Нет. 3. Не понял. |
|
#3
|
|||
|
|||
|
Цитата:
Код:
procedure Form.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with StringGrid,StringGrid.Canvas do
begin
if Cells[ACol,ARow]='Заголовок' then with rect do
begin
Pen.Color:=clBlack;
Brush.Color:=clBtnFace;
Rectangle(Left-1,top-1,Right+1,bottom+1);
end;
FillRect(Rect);
DrawText(Handle,PChar(Cells[ACol,ARow]),length(Cells[ACol,ARow]),Rect,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end; Код:
procedure Form.StringGridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin if StringGrid.Cells[ACol,ARow]='Заголовок' then CanSelect:=false; end; ) 2. На самом деле есть такие функции у StringGrid я нашел: это Код:
Rows[i].IndexOf('Подстрока')
Cols[i].IndexOf('Подстрока') Последний раз редактировалось Sahan911, 08.08.2011 в 23:50. |
|
#4
|
||||
|
||||
|
Отрисовку не довёл до конца, объяснять здесь, слишком долго. Посмотри реализацию класса в Grids.pas.
Да, кстати, ещё забыл воспользовать значением State. Последний раз редактировалось angvelem, 09.08.2011 в 00:09. |
|
#5
|
|||
|
|||
|
Я бы перешел на ListView. А еще лучше на ListView от MustangPeak. Очень навороченный компонент.
По вопросу 3 надо проверить (а Version info заполнена? может он оттуда читает?), но если что, ответ меня тоже интересует. |
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
|||
|
|||
|
Все вот отличное решение:
Код:
procedure Form.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var i:integer;
begin
with StringGrid,StringGrid.Canvas do
begin
if (FixedRows=0)and(ARow=0) then
begin
Brush.Color:= clBtnFace;
FillRect(Rect);
Pen.Color:= clBackground;
Brush.Style:= bsClear;
Rectangle(Rect.Left-1,Rect.Top-1,Rect.Right+1,Rect.Bottom+1);
Pen.Color:= clBtnShadow;
MoveTo(Rect.Left+1,Rect.Bottom-1);
LineTo(Rect.Right-1,Rect.Bottom-1);
LineTo(Rect.Right-1,Rect.Top);
Pen.Color:= clBtnHighlight;
MoveTo(Rect.Right-1,Rect.Top);
LineTo(Rect.Left,Rect.Top);
LineTo(Rect.Left,Rect.Bottom);
end;
if((GetWindowlong(FileGr.Handle,GWL_STYLE)and WS_VSCROLL)=0)
and(ColWidths[5]<113) then for i:=0 to 5 do ColWidths[i]:=ColWidths[i]+3;
if((GetWindowlong(FileGr.Handle,GWL_STYLE)and WS_VSCROLL)<>0)
and(ColWidths[5]>113) then for i:=0 to 5 do ColWidths[i]:=ColWidths[i]-3;
FillRect(Rect);
DrawText(Handle,PChar(Cells[ACol,ARow]),length(Cells[ACol,ARow]),Rect,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;
procedure Form.StringGridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
with StringGrid do
begin
if Arow=0 then
begin
CanSelect:=false;
Options:=Options-[goRangeSelect]-[goDrawFocusSelected];
end else
Options:=Options+[goRangeSelect]+[goDrawFocusSelected];
end;
end; |