Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-89979
Vitaliygavrilov
2003-11-17 15:22
2003.11.27
Как загрузить другую программу из своей


1-89867
DimaK
2003-11-15 23:13
2003.11.27
Обновление трея


6-90020
SergP
2003-09-28 13:23
2003.11.27
Сокеты... ошибка 11001 и пр. Что с ними делать?


3-89757
vova
2003-11-07 21:30
2003.11.27
нарастание значения


1-89812
KIE
2003-11-14 23:42
2003.11.27
объединение ресурсов двух программ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский