Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

Вызов процедуры из другого окна.   Найти похожие ветки 

 
UDS   (2003-11-13 21:08) [0]

На форме1 есть кнопка которая легко изменяет содержимое (допустим) label1.caption на форме1 при помощи объявленной ранее процедуры. А как управлять этой процедурой из другого немодального окна программы? Если мне, скажем, надо изменить label на форме1 нажатием кнопки находящейся на форме2, япросто пишу в обработчике:
form1.label1.caption:=".......";
И это работает, но если я хочу сделать то же самое через процедуру типа:
form1.<Название процедуры> то это естественно не канает.

Помогите, пожалуйста, если кто понял чо я тут наплёл.


 
Fay   (2003-11-13 21:13) [1]

From1.Button1.OnClick(nil)


 
UDS   (2003-11-13 21:15) [2]

Вот кусок кода:

procedure TForm2.Button2Click(Sender: TObject);
begin
if label5.Caption="14" then
prav:=prav+2.5;
IQCALC; // (процедура IQCALC заявлена в unit1, а тут она её не воспринимает!!! Почему???)
form1.Button9.Enabled:=false;
form1.Timer1.enabled:=false;
close;
end;


 
Zacho ©   (2003-11-13 21:16) [3]

Почитай любой учебник с основами ObjectPascal. У меня сильное подозрение (практически - уверенность :-) ), что ты путаешь окна, формы и модули, и процедуры и методы. А объяснять все это в форуме никто не будет - несколько десятков килобайт текста, как минимум, написать придется.
Надеюсь, без обид ? :)


 
UDS   (2003-11-13 21:17) [4]

Нет кнопка как раз находится на форме2 а надо чтобы она запустила процедуру из формы 1 и для формы 1


 
Vlad ©   (2003-11-13 21:23) [5]

form1.IQCALC;


 
UDS   (2003-11-13 21:23) [6]

Очень может быть что и путаю, Но вот учебников целая гора и ни в одном не написано как запустить процедуру из другого окна (или формы)...
Про методы ничего не знаю, но все свои проги лепил сплошь на процедурах, и все было окей пока не появилась необходимость использовать дополнительные формы, и тут было все окей пока не этот затык:
я ему обратись ка к процедуре IQCALC, а он мне - ундекларе идентифер...


 
UDS   (2003-11-13 21:25) [7]

> Vlad
> form1.IQCALC;

пробовал, не работает;


 
Vlad ©   (2003-11-13 21:26) [8]

Настоятельно рекомендую почитать книги по основам дельфи/object pascal. Иначе твоя процедура IQCALC будет выдавать тебе IQ намного меньше, чем ты заслуживаешь :)


 
Vlad ©   (2003-11-13 21:26) [9]

uses unit1


 
UDS   (2003-11-13 21:35) [10]

Ну спасибо за помощь. Я рад за вас, если вы одними книгами свой IQ (КУР) подняли до такого уровня. А в моих 3-х толстых книгах по DELPHI об этом (о взаимосвязи компонентов форм через процедуры) написано более чем прозрачно.


 
Zacho ©   (2003-11-13 21:39) [11]


> UDS (13.11.03 21:23) [6]
> Очень может быть что и путаю, Но вот учебников целая гора
> и ни в одном не написано как запустить процедуру из другого
> окна (или формы)...

Во-первых окно и форма - это все-таки несколько разные вещи.
Во-вторых - или хреновые учебники (типа "Освой Дельфи за 10 часов"), или ты их плохо читаешь.
Еще раз повторю - тебе нужны основы Object Pascal, в частности - понятие модуля (unit) и основы ООП в Object Pascal.
Ведь явно видно, например, что ты не понимаешь разницы между процедурой и методом класса.
Еще раз - надеюсь, без обид.


 
Zacho ©   (2003-11-13 21:40) [12]


> UDS (13.11.03 21:35) [10]

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


 
UDS   (2003-11-13 22:08) [13]

Если я не могу объяснить суть проблемы, это вовсе не значит, что я читаю не те книги или не понимаю разницы между окном и формой. Просто иногда люди настолько грамотны, что думают что я спрашиваю о каких-то сложных вещах. Проще ! Всё проще! Я не ас в программировании и свою планку я знаю - я делаю относительно простые развивалки для ребятишек. Я обязательно найду ответ и вернусь, чтобы показать какой ПРОСТОЙ он должен был быть.
Меня просто заинтриговала Hint-подсветка при MouseOver на кнопке "Форумы" на этой странице: "Здесь вы можете задать свой вопрос и наверняка получите ответ". Надо бы подсказать веб-прогмеру чтобы дописал: "...наверняка получите ответ: Почитай книги!!!"


 
Zacho ©   (2003-11-13 22:26) [14]


> UDS (13.11.03 22:08) [13]

Дело не в том, ас или нет, а в том, что у тебя явно нет базовых знаний Object Pascal, а здесь форум мало поможет. Здесь книги нужны. Повторюсь, ну кому охота в ответ на вопрос писать несколько десятков килобайт текста ?
А ответ действительно простой - это или uses unit1, или uses unit1 + form1.IQCALC , в зависимости от того, что такое IQCALC - процедура в модуле unit1 или метод класса TForm1. А этой информации ты не привел. Заметь, что оба эти ответа уже были в этой ветке. Есть еще вариант: IQCALC - процедура, но объявлена она в разделе implementation модуля unit1, тогда ее надо объявить в разделе interface.
Но без базовых знаний такие вопросы будут появлятся постоянно, и никакой форум не поможет.


 
UDS   (2003-11-14 09:20) [15]

Процедура IQCALC объявлена вручную в исполняемой части(implementation) модуля unit1,

implementation

uses Unit2;

{$R *.DFM}
procedure IQCALC;
begin
if prav>12.5 then IQ:=prav+75;
form1.panel5.caption:=floattostr(IQ);
end;

и если я её вызываю в этом же модуле другой процедурой(например: procedure TForm1.Button1Click), то
она выполняется без проблем. Но мне нужно, чтобы она вызывалась нажатием кнопки формы2.
Форма2 показывает дочернее немодальное окно.
Килобайты текста писать не надо, - они все у меня на столе в виде книг, которые написаны людьми,
у которых IQ в этом направлении явно выше чем мой..
Проще показать код выполнения похожей операции.
Что же касается получения базовых знаний -
я закончил курсы программистов TurboPascal и Delphi (для себя). Правда было это уже давненько.
Программку делаю, чтобы избавиться от экзамена по психологии в универе на заочном.
А вообще я специалист по компьютерной графике с богатым 12-летним радиотехническим
прошлым...
> ...никакой форум не поможет.
До сих пор помогал. Хотя времена меняются, меняются люди и нравы...


 
Юрий Зотов ©   (2003-11-14 09:29) [16]

> UDS (14.11.03 09:20) [15]
> я закончил курсы программистов TurboPascal и Delphi

В таком случае Вы должны знать, что такое модули, секции interface и implementation, области видимости и т.п. Тогда какие же могут быть проблемы?

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


 
UDS   (2003-11-15 00:09) [17]

Я вернулся, как и обещал. С ОТВЕТОМ !
Просто процедуру надо было объявить как глобальную, на весь проект. Для этого в модуле формы1 надо было написать не как у меня было:
<procedure IQCALC>, a <procedure TForm1.IQCALC>
и в TFORM1>public обозначить наличие этой процедуры. После чего к ней спокойно можно обращаться из модулей других форм.
И ВСЁ !!!!
И это я не в книжках нашёл (Бесполезно.Такие простые вещи там не пишут). Один чел добрый подсказал. Только вот пришлось к нему через весь город переться.
Так что будьте проще господа. Иногда сюда обращаются чайники вроде меня, и не надо сильно мудрить с ответом или посылать читать книги. Для того чтобы научить человека играть на гитаре можно отправить его в музыкальную школу лет так на пяток, а иожно показать пару-тройку аккордов и ему достаточно...
Я не собираюсь всю свою жизнь посвящать программированию. Поэтому я выбираю второй вариант. Мне достаточно показать...
Удачи господа! Программка доделана, слава богу. Зачет по психологии обеспечен. Займусь-ка я лучше 3D-графикой. Это у меня лучше получается.


 
Zacho ©   (2003-11-15 00:28) [18]

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


 
Германн ©   (2003-11-15 02:11) [19]

Ну да, можно показать "пару-тройку" аккордов на гитаре. Только вот исходно, ну никак не было понятно, что речь идет о гитаре! А вдруг это была бы арфа? К тому же и гитары есть разные.


 
tnn   (2003-11-15 04:04) [20]

блин , а вот так что трудно сделать

unit Unit1;
interface
...........

procedure IQCALC;

implementation

uses Unit2;

{$R *.DFM}
procedure IQCALC;
begin
if prav>12.5 then IQ:=prav+75;
form1.panel5.caption:=floattostr(IQ);
end;
..........


и вызывай процедуру откуда шочешь ... только unit1 в uses не забывай прописать ...


 
Palladin ©   (2003-11-15 06:50) [21]


> UDS (15.11.03 00:09) [17]

Слушай. Если бы ты посещал этот самый несчастный курс не для галочки, то на этот вопрос, как и на многие другие, которые, чувствую, еще возникнут, ты бы ответил сам. А через некоторое время, 2-3 месяца, они бы для тебя решались тобой же абсолютно прозрачно на более низком уровне. Я имею в виду то, что ты о них даже не задумывлся бы. Так давай же теперь более серьезно принимать то что говорят другие и то что пишут, а не заниматся бездарным зубрежем и рассматриванием картинок.



Страницы: 1 вся ветка

Текущий архив: 2003.11.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.044 c
3-89722
ivc_andr
2003-11-10 10:41
2003.11.27
как загнать данные из *.dbf в Microsoft SQL Server?


14-90057
Denis_Ac
2003-10-31 08:58
2003.11.27
Вот Интересно стало


1-89826
Лана Розанова
2003-11-15 08:02
2003.11.27
Запуск программы с параметрами


14-90088
ИМХО
2003-11-04 00:57
2003.11.27
gsdll32.dll


3-89679
lovres
2003-11-06 09:26
2003.11.27
Как подключиться к Paradox-таблице без BDE?