Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 488

/ вопрос решён /

Попрошу ещё раз помощи, тут уже наверно ничего сложного, но я не знаю как:
Как передать параметр процедуре принадлежащей Form1 из фрейма, который лежит на этой же форме но в sFramebar'e.

в Unit1:

 
procedure CreateDirUser(dirName: string);
 ....

в Unit7:
 
procedure TFrame7.sButton1Click(Sender: TObject);
begin
 Form1.CreateDirUser('1'); // - тут то и ругается

Вот и собственно вопрос, как из фрейма передать процедуре параметр, чтоб она его выполнила?

компилятор ругается примерно так:

Undeclared identifier: 'CreateDirUser'
......
и ещё с десяток других процедур, которые он не видит на главной форме


Delphi7, win7 x64

Андрей_trico Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Андрей_trico (статус: Посетитель)
Вопрос отправлен: 9 июля 2011, 18:01
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 13; последнее сообщение — 12 июля 2011, 08:17; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 9 июля 2011, 18:36 [#1]:

uses Unit1; применял?
Фрейм-то находится в другом модуле.
Старый добрый паскаль, ёмаё...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Андрей_trico

Андрей_trico (статус: Посетитель), 9 июля 2011, 19:33 [#2]:

min@y™:
да, компилятор uses Unit1; сам соизволил прописать, сообщив об этом меседжем, но все равно останавливается на этой строчке Form1.CreateDirUser('1');

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

только не говорите что придётся в тело фрейма прописывать все свои дополнительные процедуры(((
min@y™

min@y™ (статус: Доктор наук), 9 июля 2011, 19:41 [#3]:

А может у тебя процедура CreateDirUser() не прописана в секции interface в unit1?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Андрей_trico

Андрей_trico (статус: Посетитель), 10 июля 2011, 01:06 [#4]:

Да, действительно, после объявления процедур в interface они стали видимы, но как-то я их криво прописал, пишет ошибку:

[Error] Unit1.pas(77): Unsatisfied forward or external declaration: 'TForm1.CreateDirUser'

а прописал я так:
 procedure CreateDirUser(dirName: string );
если в скобках написать сендер ту обджект, то опять ругается на использование процедур в теле программы.
процедуры стали видны на всех фреймах, оч благодарен, но как же их прописать правильно, чтоб компилятор пропустил?

ругается оно на строчке объявления процедуры в Unit1.
Gooddy

Gooddy (статус: 3-ий класс), 10 июля 2011, 03:08 [#5]:

CreateDirUser не принадлежит объекту Form1!!!
Так надо писать:
type
TForm1 = class(TForm)
private
...
public
  procedure CreateDirUser(dirName: string );
...
end;
 
...
 
  procedure TForm1.CreateDirUser(dirName: string);
  begin
    ...
  end;

Вуаля.
Чисти код! Чисти код! Чисти код!
Андрей_trico

Андрей_trico (статус: Посетитель), 10 июля 2011, 11:32 [#6]:

Ура! заработало! спасибо народ! Через класс первой формы пропустило)

10 июля 2011, 11:36: Статус вопроса изменён на решённый (изменил автор вопроса — Андрей_trico): Спасибо Всем за участие, вопрос решён. Функции нужно было объявлять через класс первой формы.

Андрей_trico

Андрей_trico (статус: Посетитель), 10 июля 2011, 13:11 [#7]:

блин, на ровном месте, просто раньше не использовал фреймбар, теперь куча вопросов))

на этом самом фрейме7, который вкручен во фреймбар, есть комбобокс. я не могу теперь к нему обратиться.
procedure TForm1.sFrameBar1Items1CreateFrame(Sender: TObject;
  var Frame: TCustomFrame);
begin
 
 Frame := TFrame7.Create(nil); // при раскрывании кнопки фреймбара прикручивается ранее созданный фрейм7
 Frame.Repaint;
 
sComboBox1.Items.Add('...')  // вот тут опять ошибка

опять я застрял((
min@y™

min@y™ (статус: Доктор наук), 10 июля 2011, 13:16 [#8]:

Цитата (Андрей_trico):

опять я застрял((

Ты застрял, потому что знаешь о программировании меньше, чем нихрена. Прочитал 0 книжек. А зря... Отсюда и дебильные вопросы, которые решаются спинным мозгом.
sComboBox1 где находится-то?

Цитата (Андрей_trico):

// вот тут опять ошибка

Какая ошибка-то? Телепатор за неуплату отключили.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Андрей_trico

Андрей_trico (статус: Посетитель), 10 июля 2011, 22:03 [#9]:

ели бы все всё знали, то не было бы этого топика, как и этого форума в целом)) и если бы я был по профессии программист, то наверно не задавал бы таких простых вопросов))
если вы, min@y™: , много знаете, то поделитесь знаниями - буду признателен.

в данной ситуации компилятор выдаёт следующее:
[Error] Unit1.pas(2408): Undeclared identifier: 'sComboBox1'

поясню - это при попытке из Form1 программно заполнить комбобокс расположенный на Frame7
procedure TForm1.sFrameBar1Items1CreateFrame(Sender: TObject;
  var Frame: TCustomFrame);
begin
 
begin
 
 
 Frame := TFrame7.Create(nil);
  Frame.Repaint;
 
Frame.sComboBox1.Items.Add('....');  // тут остановился компилятор с выше указанной ошибкой

он просто не видит комбика, как будто его просто нет. перевернул я много форумов, теперь только каша в голове((
Андрей_trico

Андрей_trico (статус: Посетитель), 10 июля 2011, 22:07 [#10]:

дело в том, что в пределах одной формы программа уже полностью работоспособна и функциональна, нужно теперь всё расположить красиво, а вот с фреймами засада получилась((
min@y™

min@y™ (статус: Доктор наук), 11 июля 2011, 08:22 [#11]:

Ёмаё, но вот посмотри, какой тип у тебя имеет переменная Frame. Это TCustomFrame, видишь? А на TCustomFrame нету никаких комбобоксов!
procedure TForm1.sFrameBar1Items1CreateFrame(Sender: TObject;
  var Frame: TCustomFrame);
begin
  Frame := TFrame7.Create(nil); // <--- почему nil, а не Application? 
  with TFrame7(Frame) do
    begin
      Repaint(); // <--- нахрена это вообще?
      sComboBox1.Items.Add('Я пойду в енторнет и скачаю книжку по delphi.');
    end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Андрей_trico

Андрей_trico (статус: Посетитель), 12 июля 2011, 01:10 [#12]:

Ребят, спасибо Вам всем за участие! Минай - спасибо за правильную формулировку, теперь работает)

p.s.: Знания как и книги - приносят пользу если их не прячут).
Да, и на счёт книг по делфи, я не одну прочитал, просто то что читал не всегда понимал полностью, ведь никто не объяснял.
min@y™

min@y™ (статус: Доктор наук), 12 июля 2011, 08:17 [#13]:

Цитата (Андрей_trico):

Да, и на счёт книг по делфи, я не одну прочитал

НЕ ВЕРЮ! (© Станиславкий)

Цитата (Андрей_trico):

просто то что читал не всегда понимал полностью, ведь никто не объяснял.

Когда я учился, интернета не было. У меня была одна единственная драная книжка по турбопаскалю. И ничего. Пока я заканчивал 2-й курс, моими прогами уже весь универ пользовался. И мне тоже никто нихрена не объяснял.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.04 сек.