Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизВызов процедуры из другого окна. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c