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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.09.2012, 21:51
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию Объект как переменная процедуры. Общая процедура для нескольких однотипных объектов

Есть процедура
Код:
procedure TFOilGasSprt.FillStringGrid();
var
  i,j:integer;
  RecCnt:Cardinal;
begin
  With DM, Self, MissionsStringGrid do
  begin
      RecCnt:=Query.RecordCount;
      //Êîëè÷åñòâî ñòðîê ñîãëàñíî êîëè÷åñòâó çàïèñåé çàïðîñà
      MissionsCout.Caption:=IntTostr(RecCnt);
      if RecCnt=0 then RowCount:=2
      Else if RecCnt=1 then RowCount:=2 else RowCount:=RecCnt+1;
      //Î÷èùàåì MissionsStringGrid îò ñòàðûõ çíà÷åíèé
      j:=0;
      while (Cells[0,j]<>'') do
      begin
        j:=j+1;
        Rows[j].Clear;
      end;
      //Çàïîëíÿåì MissionsStringGrid äàííûìè èç çàïðîñà
      If RecCnt<>0 then
      begin
        for j:=1 to RecCnt do
        begin
          for i:=0 to Query.Fields.Count-1 do Cells[i,j]:=Query.Fields[i].AsString;
          Query.Next;
        end;
      end;
  end;
end;

Как передать Name StringGrid в процедуру, чтобы она была общей для любых StringGrid с именами, например, StringGrid1 и StringGrid2?
Ответить с цитированием
  #2  
Старый 10.09.2012, 21:57
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так и передавай:
Код:
procedure TFOilGasSprt.FillStringGrid(MissionsStringGrid : TStringGrid); 
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sorockinalex (10.09.2012)
  #3  
Старый 10.09.2012, 22:15
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Пробовал, не понял как вызов организовать... Там константу надо создавать? Напишите пожалуйста вызов, если не сложно!
Ответить с цитированием
  #4  
Старый 10.09.2012, 22:26
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Как-то так:
Код:
type
  TFOilGasSprt = class
  public
    procedure FillStringGrid(MissionsStringGrid : TStringGrid);
  end.
...
var
  FOilGasSprt : TFOilGasSprt;
...
begin
  FOilGasSprt.FillStringGrid(StringGrid1 : TStringGrid);
...
  FOilGasSprt.FillStringGrid(StringGrid2 : TStringGrid);
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sorockinalex (10.09.2012)
  #5  
Старый 10.09.2012, 23:03
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

СПАСИБО ОГРОМНОЕ!
Ответить с цитированием
  #6  
Старый 10.09.2012, 23:12
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

блин, не работает:
Код:
procedure FillStringGrid(SG : TStringGrid; LBL: TLabel);

....

procedure TFOilGasSprt.FillStringGrid(SG : TStringGrid; LBL: TLabel);
var
  i,j:integer;
  RecCnt:Cardinal;
begin
  With DM, Self, SG do
  begin
      RecCnt:=Query.RecordCount;
      //Количество строк согласно количеству записей запроса
      LBL.Caption:=IntTostr(RecCnt);
      if RecCnt=0 then RowCount:=2
      Else if RecCnt=1 then RowCount:=2 else RowCount:=RecCnt+1;
      //Очищаем MissionsStringGrid от старых значений
      j:=0;
      while (Cells[0,j]<>'') do
      begin
        j:=j+1;
        Rows[j].Clear;
      end;
      //Заполняем MissionsStringGrid данными из запроса
      If RecCnt<>0 then
      begin
        for j:=1 to RecCnt do
        begin
          for i:=0 to Query.Fields.Count-1 do Cells[i,j]:=Query.Fields[i].AsString;
          Query.Next;
        end;
      end;
  end;
end;

.....

procedure TFOilGasSprt.MissionsRefresh();
begin
  MissionsFilter();
//  FillMissionsStringGrid();
FillStringGrid(MissionsStringGrid, MissionsCount);
end;

Undeclared Identifier MissionsCount в процедуре MissionsRefresh();
Ответить с цитированием
  #7  
Старый 10.09.2012, 23:16
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Откуда TFOilGasSprt.MissionsRefresh знает о TStringGrid?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sorockinalex (10.09.2012)
  #8  
Старый 10.09.2012, 23:17
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
Хорошо

Всё работает! Опечатался ))
Ответить с цитированием
  #9  
Старый 10.09.2012, 23:22
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Откуда TFOilGasSprt.MissionsRefresh знает о TStringGrid?
вот отсюда:
Код:
type
  TFOilGasSprt = class(TForm)
    BranchesAndLocationsStringGrid: TStringGrid;
    WorksCount: TLabel;
    MissionsCout: TLabel;
    MissionsStringGrid: TStringGrid;
Ответить с цитированием
  #10  
Старый 10.09.2012, 23:25
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

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

Автоматом удаляются визуальные компонеты "брошенные" на форму (присутствуют в DFM). За остальные отвечаешь сам.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sorockinalex (10.09.2012)
  #12  
Старый 10.09.2012, 23:31
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

а они и были визуальными:
Код:
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
Ответить с цитированием
  #13  
Старый 10.09.2012, 23:33
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Должны удаляться.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sorockinalex (10.09.2012)
  #14  
Старый 10.09.2012, 23:37
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

прошу прощения за беспокойство, они были под GroupBox
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter