Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2013, 01:59   #1
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
Вопрос При добавлении процедуры компилятор перестает опознавать идентификаторы обьектов формы

Приветствую! Проблема в следующем: проект нормально компилируется и работает, но если добавить в него данную процедуру (моего авторства), то проект перестает собираться и вываливает кучу ошибок, в том числе и касающихся ранее рабочей части.
Код:
procedure SendCommand(command: String);
var
  i, j: Integer;
 
begin
  for i:= 0 to ServerSocket1.Socket.ActiveConnections - 1 do  //для всех соединений
    for j:=1 to 13 do //перебираем ячейки таблицы
      if Socket.RemoteAddress = tableIP.Cells[1,j] then  //если адрес клиента = адрес в таблице 1
        if tableIPwork.Cells[0,j] = '1' and tableIPwork.Cells[1,j]='1' then  //и он выбран + он онлайн [1, 1]
          ServerSocket1.Socket.Connections[i].SendText(command);  //то отправь command
end;
Среда Delphi 7 + Win 7 x86
Ошибки после добавления процедуры:
Цитата:
[Error] Unit1.pas(56): Undeclared identifier: 'ServerSocket1'
[Error] Unit1.pas(56): 'DO' expected but identifier 'Socket' found
[Error] Unit1.pas(58): Undeclared identifier: 'Socket'
[Error] Unit1.pas(59): Undeclared identifier: 'tableIPwork'
[Error] Unit1.pas(59): 'THEN' expected but identifier 'Cells' found
[Error] Unit1.pas(67): Undeclared identifier: 'ListSelect'
[Error] Unit1.pas(68): Undeclared identifier: 'tableIP'
[Error] Unit1.pas(69): Missing operator or semicolon
[Error] Unit1.pas(70): Missing operator or semicolon
[Error] Unit1.pas(71): Missing operator or semicolon
[Error] Unit1.pas(71): Missing operator or semicolon
[Error] Unit1.pas(72): Undeclared identifier: 'F'
[Error] Unit1.pas(74): Assignment to FOR-Loop variable 'i'
[Error] Unit1.pas(76): Missing operator or semicolon
[Error] Unit1.pas(80): Missing operator or semicolon
[Error] Unit1.pas(86): Missing operator or semicolon
[Error] Unit1.pas(87): Missing operator or semicolon
[Error] Unit1.pas(90): Statement expected but 'PROCEDURE' found
[Warning] Unit1.pas(94): Unsafe type 'Pointer'
[Warning] Unit1.pas(113): Unsafe type 'Pointer'
[Warning] Unit1.pas(114): Unsafe type 'Pointer'
[Warning] Unit1.pas(116): Unsafe type 'Pointer'
[Warning] Unit1.pas(119): Unsafe type 'Pointer'
[Error] Unit1.pas(28): Unsatisfied forward or external declaration: 'TForm1.SendCommand'
[Error] Unit1.pas(29): Unsatisfied forward or external declaration: 'TForm1.FormCreate'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
noname_06 вне форума Ответить с цитированием
Старый 18.02.2013, 02:44   #2
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

попробуйте так:
Код:

  private
procedure SendCommand(command: String);

procedure TForm1.SendCommand(command: String);
var
  i, j: Integer;
 begin
  for i:= 0 to ServerSocket1.Socket.ActiveConnections - 1 do  //для всех соединений
    for j:=1 to 13 do //перебираем ячейки таблицы
      if Socket.RemoteAddress = tableIP.Cells[1,j] then  //если адрес клиента = адрес в таблице 1
        if tableIPwork.Cells[0,j] = '1' and tableIPwork.Cells[1,j]='1' then  //и он выбран + он онлайн [1, 1]
          ServerSocket1.Socket.Connections[i].SendText(command);  //то отправь command
end;
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 18.02.2013, 03:27   #3
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию

К сожалению ситуация не улучшилась, только начало ругаться еще и на listselect:tlist; в секции private. И не понятно в какую сторону копать
p.s. эта последовательность проверок повторяется в программе около десяти раз, т.е. ее нужно выносить в отдельную процедуру (напр procedure SendCommand), а не в обработчик события procedure TForm1.SendCommand(command: String);

Последний раз редактировалось noname_06; 18.02.2013 в 03:32.
noname_06 вне форума Ответить с цитированием
Старый 18.02.2013, 03:31   #4
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Можно полный исходник.
а то компоненты на форму лень кидать)
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 18.02.2013, 03:38   #5
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
По умолчанию

Собственно говоря, вотЪ.
Вложения
Тип файла: rar Project.rar (57.6 Кб, 9 просмотров)
noname_06 вне форума Ответить с цитированием
Старый 18.02.2013, 03:40   #6
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

в процедуре используются запчасти находящиеся на форме и процедура их не видит,
например она не может опознать ServerSocket1 чтобы она его нашла нужно как минимум описать что он на форме Form1.ServerSocket1 !
Как то так!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 18.02.2013, 03:47   #7
noname_06
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 49
Вопрос

Привел к виду
Код:
procedure SendCommand(command: String);
var
  i, j: Integer;

begin
  for i:= 0 to Form1.ServerSocket1.Socket.ActiveConnections - 1 do  //для всех соединений
    for j:=1 to 13 do //перебираем ячейки таблицы
      if Form1.ServerSocket1.Socket.RemoteAddress = Form1.tableIP.Cells[1,j] then  //если адрес клиента = адрес в таблице 1
        if Form1.tableIPwork.Cells[0,j] = '1' and Form1.tableIPwork.Cells[1,j]='1' then  //и он выбран + он онлайн [1, 1]
          Form1.ServerSocket1.Socket.Connections[i].SendText(command);  //то отправь command
end;
Теперь ругается только на строку
Код:
if Form1.tableIPwork.Cells[0,j] = '1' and Form1.tableIPwork.Cells[1,j]='1' then
"Operator not applicable to this operand type". Осталось выяснить чем ему не нравиться сравнение строки со строкой
noname_06 вне форума Ответить с цитированием
Старый 18.02.2013, 04:01   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
if (Form1.tableIPwork.Cells[0,j] = '1') and (Form1.tableIPwork.Cells[1,j]='1') then
потому что скобки надо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.02.2013, 04:04   #9
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Вот всё компилица
С уважением,
Volkogriz!
Вложения
Тип файла: zip Новая папка (4).zip (393.1 Кб, 12 просмотров)
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 18.02.2013, 04:06   #10
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Да Именно скобки
я скинул уже доделанный проект
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с UserForm. при нажатии CommandButton вся программа Exel перестает работать. caught.let Microsoft Office Excel 12 14.03.2012 01:18
Условия при добавлении вещей Hozy PHP 27 07.06.2011 14:41
при открытии другой книги скрипт перестает работать gramp Microsoft Office Excel 5 14.02.2011 14:11
Не работает клава а при нажатии на нее перестает работать мышь!! Дима я Компьютерное железо 10 02.03.2010 17:10
Проблема при добавлении в БД Oleg Romanchuk БД в Delphi 2 12.01.2009 12:21