Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.055 c
2-1235708177
sco
2009-02-27 07:16
2009.04.19
TImage и прорисовка (не про DoubleBuffered)


15-1234596212
Palladin
2009-02-14 10:23
2009.04.19
Декларирование указателя в Си


2-1235862485
Andrey K
2009-03-01 02:08
2009.04.19
Как добраться к свойствам компонентов.


15-1235208148
Индеец
2009-02-21 12:22
2009.04.19
Компоненты для сжатия данных


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский