Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процедура для StringGrid 
V
    Опции темы
maximjhon
Дата 21.8.2011, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Здравствуйте. Как можно сделать так чтобы одна и та же процедура была универсальна для нескольких  таблиц StringGrid, находящихся на разных формах и объявленных в разных модулях одного проекта. Просто прописывать процедуру для каждого StringGrid неуемно. 

например вот есть у меня повторяющаяся  процедура вычисляющая сумму элементов StringGrid :

Код

procedure Sum;
   var i,j:integer;
begin
   VolumeRes:=0;//глобальная переменная 
with Form1.StringGrid1 do begin
       for i:=1 to RowCount-1 do
    for j:=1 to ColCount-1 do
   VolumeRes:=VolumeRes+StrToInt(Cells[j,i]);
end;
end;


А я хочу, чтобы эта процедура была доступна для любого StrinGrid-а в проекте


Это сообщение отредактировал(а) maximjhon - 21.8.2011, 09:28
PM MAIL   Вверх
superVad
Дата 21.8.2011, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



Сделай из этой процедуры - функцию которая возвращает сумму. СтрингГрид передавай в нее параметром. Тот модуль в который ты добавишь эту функцию, подключай через uses к тем модулям где она нужна.

Примерно, так:
Код

function Sum(sg: TStringGrid): integer;
   var i,j:integer;
begin
   Result:=0;//глобальная переменная 
with sg do begin
       for i:=1 to RowCount-1 do
    for j:=1 to ColCount-1 do
   Result:=Result+StrToInt(Cells[j,i]);
end;
end;


Это сообщение отредактировал(а) superVad - 21.8.2011, 10:18
PM MAIL   Вверх
maximjhon
Дата 21.8.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Я так и сделал, но почему то функция действует в пределах одного модуля, в других модулях она не работает, хотя я подключил к ним через uses модуль, в котором она определена.
PM MAIL   Вверх
Данкинг
Дата 21.8.2011, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(maximjhon @ 21.8.2011,  13:31)
Я так и сделал, но почему то функция действует в пределах одного модуля, в других модулях она не работает, хотя я подключил к ним через uses модуль, в котором она определена.

А как ты её вызываешь-то?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
14SatanA88
Дата 21.8.2011, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



Цитата(maximjhon @  21.8.2011,  12:31 Найти цитируемый пост)
Я так и сделал, но почему то функция действует в пределах одного модуля, в других модулях она не работает, хотя я подключил к ним через uses модуль, в котором она определена.


области видимости и идентификаторы
PM MAIL ICQ   Вверх
maximjhon
Дата 21.8.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



я вызываю функцию так:
Код

volumeRes:=Sum(StrigGrid1);

Если я вызываю функцию  в модуле,где она определена, то она работает, а если вызываю в другом модуле, то компилятор не распознает эту функцию
PM MAIL   Вверх
superVad
Дата 21.8.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



maximjhon, все зависит от того где ты эту функцию объявил.
Если внутри формы (т.е. внутри объекта), то надо перед функцией написать название этого объекта (НазваниеОбъекта.Sum(StrigGrid1)). Но надо, конечно же, что он был создан... И функция должна быть в паблике.
Лучше создать отдельный юнит и туда вставить эту функцию, тогда не понадобится создавать объект и писать его имя перед функцией.

Это сообщение отредактировал(а) superVad - 21.8.2011, 14:17
PM MAIL   Вверх
Данкинг
Дата 21.8.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Правильно, вызывать же надо примерно так:
Код

Form1.volumeRes:=Sum(StrigGrid1);




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
maximjhon
Дата 30.8.2011, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Я разобрался с проблемой, ПРОСТОЯ Я ЗАБЫЛ ОПРЕДЕЛИТЬ ФУНКЦИЮ В РАЗДЕЛЕ TYPE МОДУЛЯ,ОТКУДА ОНА ВЫЗЫВАЕТСЯ В ДРУГИХ МОДУЛЯХ.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1220 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.