![]() |
|
|
Регистрация | << Правила форума >> | 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. Не понял. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 09.08.2011 в 00:09. |
#5
|
|||
|
|||
![]() Я бы перешел на ListView. А еще лучше на ListView от MustangPeak. Очень навороченный компонент.
По вопросу 3 надо проверить (а Version info заполнена? может он оттуда читает?), но если что, ответ меня тоже интересует. |
#6
|
|||
|
|||
![]() Цитата:
Код:
ShowMessage('HelloWorld!'); ![]() |
#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; Код:
ShowMessage('HelloWorld!'); ![]() |