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

Вниз

Функция в другой форме   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
15-1234906345
Lamer@fools.ua
2009-02-18 00:32
2009.04.19
Сдам мозг в аренду в Киеве


15-1234767612
123-ий
2009-02-16 10:00
2009.04.19
Работа с Excel


15-1234855526
Andy BitOff
2009-02-17 10:25
2009.04.19
Покритикуйте =)


10-1155649556
Степан
2006-08-15 17:45
2009.04.19
Объектная модель Paint


15-1234465909
Кое кто
2009-02-12 22:11
2009.04.19
Универсальный вьюер