powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / КАРАУЛ, НЕ ДОГОНЯЮ
15 сообщений из 15, страница 1 из 1
КАРАУЛ, НЕ ДОГОНЯЮ
    #32329535
Valdemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private
procedure otobragenie(nomer_oper:byte);

объявляю процедуру в модуле, и в нутри нее обращаюся к компоненту TStringGrid

procedure TFormAdd.otobragenie(nomer_oper:byte)
begin
case nomer_oper of
1:begin
i:=0;
матерится здесь:
formadd.SGSpisok.Cells[i,j]:=strData[1]; i:=i+1;
ошибка обращения по адресу, нет доступа
formadd.SGSpisok.Cells[i,j]:=strData[2]; i:=i+1;
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32329536
Aleksey777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что то запятых между i и j не разглядел
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32329537
Valdemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приглядись они там есть, это точно.
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32329541
dubok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а точно такая ячейка есть formadd.SGSpisok.Cells[i,j] я вот напиример не понял чему у тебя j равно
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32329543
Valdemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j:=1 эта переменная объявляется раньше
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32329551
Valdemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема была решена: нет необходимость обращаться через formadd.
те вместо
formadd.SGSpisok.Cells[i,j]:=strData[1]; i:=i+1;
надо
SGSpisok.Cells[i,j]:=strData[1]; i:=i+1;

а вот ктонибудь объяснит? почему так?
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32329603
Сашка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рискну предположить, это из-за того, что ты ее описал в разделе private. опиши ты ее в public, я думаю этой бы ошибки не было
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32329626
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому что FormAdd - это переменная, и ей может быть не присвоено значение, а если ты пишешь self.SGSpisok или просто SGSpisok - ты обращаешься прямо к текущему экземпляру формы, для которого вызвана otobragenie
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32330090
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_kus прав

когда Delphi генерирует модуль для формы, то она создаёт соответсвующий класс, например TForm1, а также в интерфейсном разделе var этого модуля
объявляется переменная form1:TForm1;

Эта переменная будет проинициализирована в модуле проекта (файл .dpr) только если включен флаг автоматического создания формы, либо в свойствах проекта форма находится в списке форм, котоыре создаются автоматически при запуске программы.

Иначе перед обращением к форме необходимо написать
Form1:=TForm1.Create(Self);

либо так, как записано в файле .dpr

Application.CreateForm(TForm1, Form1);

Первый способ будет работать только если вызов делается внутри метода другой формы. При этом создаваемая форма будет считаться дочерней от той, в методе которой она создана. Во втором случае она как бы независима от других форм, кроме главной.

Ручное создание форм обычно приходится применять в больших проектах, когда держать все формы созданными невозможно из-за внутренних ограничений системы Windows (не хватает свободных дескрипторов окон).

В общем-то в вашем примере типичная ошибка при работе с классами. При обращении к полям класса внутри методов не следует указывать конкретную переменную данного класса, а нужно просто обращаться к соответсвующему полю. Компилятор это не считает ошибкой и пропускает, поскольку синтакисчески всё правильно. Но потом в работе из-за этого возникает масса проблем. Код будет работать всё время только с данной конкретной переменной и если создать ещё один экземпляр класса TForm1, то в нём никаких изменекий не будет, менятся будет только тот конкретный экземпляр класса, на который вы сослались в своём методе.
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32330096
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мыльников писал:Ручное создание форм обычно приходится применять в больших проектах, когда держать все формы созданными невозможно из-за внутренних ограничений системы Windows (не хватает свободных дескрипторов окон).
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32330123
Могун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так и рождаются мифы... Дескрипторов дефицит(2млрд)
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32330124
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дарагой этоже сколько в приложениях окон то нужно быдет насоздовать
скорее ресурсов не хватит чем дескрипторов окон
_____________
__
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32330149
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в <='98 часто было. в какой-то момент выпадала ошибка Win 32 API про недостаток хэндлов. когда разбирались, получалось, что каждая визуальная компонента (а может и не только визуальная) занимала хэндл.
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32330195
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да просто дело в том, что если создавать все формы и их много,то будет долго открываться программа. Кстати большинство юзеров будут при этом говорить, что у тебя тормозная программа и вообще полное г...
...
Рейтинг: 0 / 0
КАРАУЛ, НЕ ДОГОНЯЮ
    #32330234
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Cauchy
Вот именно, а то тут некоторым дескрипторов нехватает :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / КАРАУЛ, НЕ ДОГОНЯЮ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]