Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.08.2011, 14:02
Sahan911 Sahan911 вне форума
Прохожий
 
Регистрация: 08.08.2011
Адрес: Воронеж
Сообщения: 14
Версия Delphi: 2006,7,10
Репутация: 10
Вопрос Помощь со StringGrid

Народ! Создал в Stringgrid 1 фиксированную строку. При работе с программой мне нужно устанавливать общее количество строк равное 1. При этом Delphi убирает фиксированную строку и пишет что "количество фикс. строк не может быть меньше общего количества строк". Возможно ли это обойти и как?
2 вопрос: есть ли у Stringgrid готовая функция, которая возвращяет индекс строки или индекс столбца в которой(или котором) содержится данная подстрока(чтобы не приходилось делать цикл:
Код:
for i:=1 to RowCount-1 do if Cells[1,i]='Подстрока' then ...;
И 3 вопрос: На 7 в диспетчере я обнаружил столбец "описание процесса". Как можно описать свой процесс?(типо этого:
Код:
Application. ? :='Описание';//Не Title!
Заранее благодарен за помощь.

Последний раз редактировалось Sahan911, 08.08.2011 в 20:45.
Ответить с цитированием
  #2  
Старый 08.08.2011, 21:32
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

1. Если создал фиксированную строку, не забывай учитывать её в общем количестве: Нужна 1 считай = 2. То же касается и колонок, при имеющейся фиксированной колонке.
2. Нет.
3. Не понял.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 08.08.2011, 23:45
Sahan911 Sahan911 вне форума
Прохожий
 
Регистрация: 08.08.2011
Адрес: Воронеж
Сообщения: 14
Версия Delphi: 2006,7,10
Репутация: 10
Восклицание

Цитата:
Сообщение от angvelem
1. Если создал фиксированную строку, не забывай учитывать её в общем количестве: Нужна 1 считай = 2. То же касается и колонок, при имеющейся фиксированной колонке.
2. Нет.
3. Не понял.
1. Я знаю что для Fix-строк и столбцов нужны еще по 1 строке и столбцу. Я спрашиваю как это обойти(например, как графически сэмитировать их с помощью канвы) Я чтото попытался подобное сделать:
Код:
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('Подстрока') 
3. Я имел в виду что в диспетчере задач на виндовс 7 и Vista в процессах появился столбец "Описание" где к каждому процессу идет описание: (Пример: taskmgr.exe -> Диспетчер задач Windows).Я спрашиваю как мне сделать тоже самое(MyProgram -> Блабла).

Последний раз редактировалось Sahan911, 08.08.2011 в 23:50.
Ответить с цитированием
  #4  
Старый 08.08.2011, 23:55
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Отрисовку не довёл до конца, объяснять здесь, слишком долго. Посмотри реализацию класса в Grids.pas.
Да, кстати, ещё забыл воспользовать значением State.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 09.08.2011 в 00:09.
Ответить с цитированием
  #5  
Старый 09.08.2011, 01:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я бы перешел на ListView. А еще лучше на ListView от MustangPeak. Очень навороченный компонент.

По вопросу 3 надо проверить (а Version info заполнена? может он оттуда читает?), но если что, ответ меня тоже интересует.
Ответить с цитированием
  #6  
Старый 09.08.2011, 12:57
Sahan911 Sahan911 вне форума
Прохожий
 
Регистрация: 08.08.2011
Адрес: Воронеж
Сообщения: 14
Версия Delphi: 2006,7,10
Репутация: 10
Хорошо

Цитата:
Сообщение от lmikle
По вопросу 3 надо проверить (а Version info заполнена? может он оттуда читает?), но если что, ответ меня тоже интересует.
lmikle Спасибо! Действительно, чтобы описать свой процесс надо зайти в Project-> Options-> Version info и писать в Description. Там еще можно и версию указать и прочую информацию.Я сам че-то этого не нашел.
__________________
Код:
ShowMessage('HelloWorld!');
Ответить с цитированием
  #7  
Старый 09.08.2011, 11:28
Sahan911 Sahan911 вне форума
Прохожий
 
Регистрация: 08.08.2011
Адрес: Воронеж
Сообщения: 14
Версия Delphi: 2006,7,10
Репутация: 10
Хорошо

Все вот отличное решение:
Код:
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!');
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:31.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025