Форум: "Начинающим";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
ВнизФункция в другой форме Найти похожие ветки
← →
Unforgiven (2009-03-02 12:54) [0]Такая ситуация. В одном Unit1 у меня написана функция по рисованию в PaintBox. Так же во второй форме Unit2 мне нужно использовать эту же фукцию. То есть вызвать функцию первой формы во второй...
Как это реализовать? таким способом невышло Form1.MyFync;
← →
Ega23 © (2009-03-02 12:56) [1]У формы нет функций, форма - это объект. Функции есть у юнита.
← →
Unforgiven (2009-03-02 12:59) [2]Хм. Попробывал через юнит, в нем только мои публик переменные
← →
Ega23 © (2009-03-02 13:02) [3]
> Хм. Попробывал через юнит, в нем только мои публик переменные
У юнита нет public-переменных, они есть у класса и называются полями.
Короче, что тебе нужно и какие конкретные шаги ты для достижения этой цели выполнил?
← →
clickmaker © (2009-03-02 13:03) [4]функции, которые не привязаны к формам, лучше выносить в отдельный юнит. А в других - uses его
← →
Unforgiven (2009-03-02 13:07) [5]>Ega23
Мне надо чтобы во второй форме я мог нажимая на кнопку вызывать функцию первого юнита.
То есть тут надо как то вызвать фукцию первого юнита.
procedure TForm2.ButtonClick(Sender: TObject);
begin
end;
← →
Б (2009-03-02 13:10) [6]Прототип функции нужно объявить в интерфейсной части подключаемого модуля, а потом этот модуль прицепить к телу программы (главного модуля). Вот и все дела.
← →
Сергей М. © (2009-03-02 13:11) [7]
> таким способом невышло Form1.MyFync
Невышло ? А зачем засовывал ?)
Что значит "невышло" ?
← →
Anatoly Podgoretsky © (2009-03-02 13:12) [8]
> Мне надо чтобы во второй форме я мог нажимая на кнопку вызывать
> функцию первого юнита.
> То есть тут надо как то вызвать фукцию первого юнита.
>
> procedure TForm2.ButtonClick(Sender: TObject);
> begin
>
> end;
Тут простоprocedure TForm2.ButtonClick(Sender: TObject);
begin
unit1.FuncName;
end;
← →
Ega23 © (2009-03-02 13:14) [9]
> Мне надо чтобы во второй форме я мог нажимая на кнопку вызывать
> функцию первого юнита.
> То есть тут надо как то вызвать фукцию первого юнита.
во, это уже ближе к делу.
Ты не ответил на вопрос: что ты предпринял для достижения своей цели, кроме кидания кнопки на форму и дабл-клика на ней?
← →
Unforgiven (2009-03-02 13:23) [10]
> во, это уже ближе к делу.
> Ты не ответил на вопрос: что ты предпринял для достижения
> своей цели, кроме кидания кнопки на форму и дабл-клика на
> ней?
Добавил в Uses Unit1. Пытался вызвать функцию, но кроме переменных больше ничего не вызывается. Пробывал добавлять в Type прототип но получал в ответ "[DCC Error] Unit2.pas(14): E2065 Unsatisfied forward or external declaration: "TForm2.PaintGraphic""
← →
Б (2009-03-02 13:25) [11]
> Добавил в Uses Unit1. Пытался вызвать функцию, но кроме
> переменных больше ничего не вызывается.
interface
// Прототипы объявляются здесь.
implementation
← →
Сергей М. © (2009-03-02 13:31) [12]
> Unforgiven (02.03.09 13:23) [10]
> TForm2.PaintGraphic
Это не функция.
TForm2 - это идентификатор класса, объявленного тобой в юните Unit2
PaintGraphic - это идентификатор метода этого класса.
А где же функция ?
← →
clickmaker © (2009-03-02 13:47) [13]> [10] Unforgiven (02.03.09 13:23)
из юнита 2 нужно что-то нарисовать именно на паинтбоксе формы 1 ?
← →
Unforgiven (2009-03-02 13:49) [14]>clickmaker
PaintBox у меня на форме2. А функция в юнит1
← →
clickmaker © (2009-03-02 13:51) [15]> [14] Unforgiven (02.03.09 13:49)
> >clickmaker
> PaintBox у меня на форме2. А функция в юнит1
а почему? Какое отношение имеет рисование на паинтбоксе одной формы к юниту другой?
← →
Unforgiven (2009-03-02 13:53) [16]>clickmaker
Дело в том что в функции я юзаю много данных из юнита1, но так же нужно вызвать эту же функцию через 2 форму. Как бы запустить ее.
← →
clickmaker © (2009-03-02 13:57) [17]> [16] Unforgiven (02.03.09 13:53)
как-то кривовато... я бы вынес тогда эту функцию в отдельный юнит, если она конкретно ни к одной форме не привязана.
А PaintBox и вообще любые данные можно передавать туда в параметрах.
В любом случае общедоступные функции должны быть объявлены под модификатором public
← →
ZiZiTop (2009-03-02 14:09) [18]Если сильно надо, то можно сделать новый класс (наследник), добавить пару методов и брать как образ для всех будущих форм. Хотя никакого выйгрыша всё-равно нет. Проще выделить код (который явно повторяется в методах обоих форм) согласовать параметры, вынести (хоть) в отдельный модуль и из обоих форм вызывать, так удобнее.
← →
Плохиш © (2009-03-02 14:13) [19]О, круто, ветка для тренировки телепаторов :-))
Что ж, мой говорит, что у аФФтара ошибка в 17й строке, без вариантов.
← →
Anatoly Podgoretsky © (2009-03-02 14:38) [20]> Плохиш (02.03.2009 14:13:19) [19]
Неправда варианты есть!!!
← →
ЮЮ © (2009-03-03 10:36) [21]Если функция должна рисовать одинаково и на Form1.PaintBox1 и на Form2.PaintBox2, то она должна рисовать как минимум на "абстрактном" PaintBox-е, переданном ей в качестве параметра:
procedure DrawOnPaintBox(APaintBox: TPaintBox);
...
и тогда на любой форме мы можем её вызвать:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
DrawOnPaintBox(TPaintBox(Sender));
end;
а лучше рисовать не на TPaintBox-е, а на TCanvas, ибо все равно все сведется к нему. Но тогда DrawOnPaintBox сможет рисовать не только на TPaintBox, но и на Form1.Canvas, Image1.Canvas, TBitmap.Canvas и т.д.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.05 c