Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с функциями в Delphi 
:(
    Опции темы
Kravec
  Дата 30.9.2003, 05:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Когда используешь собственную функцию в Delphi, то внутри ее приходиться писать перед именами компонентов название формы. Как от этого избавиться. Кто то мне сказал нужно писать собственный класс. В общем что делать не знаю.
  Вверх
iZZi
Дата 30.9.2003, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 22.5.2003

Репутация: нет
Всего: нет



Напиши, что тебе надо, поподробнее, а то так не поймешь.

Если пишешь метод для формы, то опиши его заголовок внутри класса формы - типа этого

Код
unit FormUnit;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
private
  { Private declarations }
  function MyFunc(param1, param2: integer): boolean;
public
  { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.MyFunc(param1, param2: integer): boolean;
begin
 result:= param1=param2; //  Здесь твой код
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
case random(2) of
  0: if Form1.MyFunc(0,0) then showmessage('wassup');
  1: if Self.MyFunc(0,0) then showmessage('wassup'); // то же самое
  2: if MyFunc(0,0) then showmessage('wassup'); // то же самое
end;
end;

end.


Это сообщение отредактировал(а) iZZi - 30.9.2003, 07:01
PM MAIL   Вверх
Kravec
  Дата 30.9.2003, 06:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











когда распологаешь функции в разделе private
выдается ошибка "Unsatisfied forward or external declaration: 'TFormMain.StatSt'"
  Вверх
iZZi
Дата 30.9.2003, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 22.5.2003

Репутация: нет
Всего: нет



Ну так надо описать метод smile.gif ... А то конечно - кода нет, а только заголовок.
PM MAIL   Вверх
Kravec
Дата 30.9.2003, 07:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











она описана все равно ругается
  Вверх
iZZi
Дата 30.9.2003, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 22.5.2003

Репутация: нет
Всего: нет



Ты прямо как у меня напиши - ругаЦЦа не должна.
Или напиши сюда свой код, посмотрим, в чем там ошибка.
PM MAIL   Вверх
x77
Дата 30.9.2003, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



мда.

ну, во-первых, можно просто объявить функцию в разделе interface:
Код

unit Unit1;

interface
 
function DoSomething: string;

implementation

function DoSomething;
begin
 Result := 'Something obviously done...';
end;

end.


объявление это может быть как в модуле с формой, так и в отдельном модуле. для того, чтобы обратиться к такой функции из того же модуля, где она объявлена, её достаточно просто вызвать. из другого модуля - следует прежде добавить Unit1 в uses этого другого модуля. Недостаток подобного метода в том, что для работы с компонентами формы придётся всегда ссылаться на них через форму. т.е. для того, чтобы в вышеприведённой функции что-то сделать скажем с Edit1: TEdit, расположенном на форме, придётсz писать Form1.Edit1.Text := 'Yo!'; Поэтому в функции, объявленные таким образом следует выносить только те действия, которые не работают с формой напрямую (хотя они могут с ней работать неявно, через параметры).

Если функция объявлена как метод формы (вариант iZZi), следует чётко представлять, откуда эта функция будет вызываться. Возможность вызова функции из тех или иных участков кода называется её областью видимости. Так, функция, объявленная в private видна будет только в том модуле, в котором она была объявлена. Её может вызывать только сама форма, либо другие классы, опсанные в том же модуле. Для того, чтобы функция могла вызываться из других модулей, её следует объявить в public. Тога вызов функции происходит через ссылку на форму, в которой она объявлена: Form1.MyFunc.

Существует ещё один способ объявить метод, так называемый метод класса. Фишка его в том, что его можно вызывать не создавая экземпляр того класса, в котором он был объявлен. Но это уже дебри smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.