Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
#1

В каком разделе класса объявить функцию? - Delphi

06.06.2014, 16:40. Просмотров 1252. Ответов 5
Метки нет (Все метки)

В каком месте кода? Я скажем решил в процедуру Button1Click, что бы функция пренадлежала ей и вызывалась нажатием кнопки. В public ведь скрывать мне нечего. Я не уверен чито так надо. Понял что я смутно очинь смутно представляю как надо.
Ошибка при компиляции на первой же строке функции. Да я ожидал что обьявление функции если оно верное будит скомпилировано, без ошибок. Без использования функции.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
 
 
     Type TFunc = function (x: real): real;
procedure DrawGraph (f: TFunc; a: real; b: real; C: TCanvas);
 
var x, y, h: real;
    max, min: real;
    sx, sy: real;
    xmid, ymid: integer;
 
begin
 sx := (c.ClipRect.Right)/(b-a);
 h := 1/sx;
 xmid := c.ClipRect.Right div 2;
 ymid := c.ClipRect.Bottom div 2;
 x := a;
 max := f( x);
 min := max;
 
 while x<=b do
  begin
   y := f( x);
   if y<min then min := y;
   if y>max then max := y;
   x := x + h;
  end;
 sy := c.ClipRect.Bottom/ (max-min);
 c.Brush.Color := clBlack;
 c.FillRect(Rect(0, 0, c.ClipRect.Right, c.ClipRect.Bottom));
  c.Pen.Color := clYellow;
  c.MoveTo(0, ymid);
 c.LineTo(c.ClipRect.Right, ymid);
 c.MoveTo(xmid, 0);
 c.LineTo(xmid, c.ClipRect.Bottom);
  x := a;
  y := f(x);
  c.Pen.Color := clWhite;
  c.MoveTo(xmid+round(sx*x), ymid-round(sy*y));
  while x<=b do
  begin
    y := f(x);
    c.LineTo(xmid+round(sx*x), ymid-round(sy*y));
    x := x + h;
  end;
end;
 //ГЂ òåïåðü, åñëè Âû Г·ГҐГЈГ®-ëèáî Г*ГҐ ГЇГ®Г*ÿëè, Г¤Г*ГўГ*éòå Г°Г*çáåðåì
  end;
 
 
 
 
 
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Brush.Style:=bsCross;
  Canvas.Brush.Color:=clRed;
  Canvas.Pen.Color:=clRed;
  Canvas.Ellipse(100,100,300,200);
 
end;
 
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2014, 16:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В каком разделе класса объявить функцию? (Delphi):

Где лучше объявить поля класса? - Delphi
Здравствуйте! Имеется форма где я программно рисую графики, по даблклику по форме открывается окно редактор свойств графика. В редакторе...

Массивы. Узнать по номеру квартиры в каком она подъезде, на каком этаже и какая по счету на лест. клетке - Delphi
Привет! Нужна помощь, мне надо написать такую программу: едитами вводится кол-во парадных в доме , количество этажей и количество парадных...

Как объявить friend функцию класса - C++
как это оформить, чтобы работало // ----------&gt; one.h #include &quot;two.h&quot; #ifndef ONE_H_INCLUDED #define ONE_H_INCLUDED #include...

Можно ли объявить перменную не в разделе Var? - PascalABC.NET
Приветствую, есть вопрос, можно ли объявить перменную не в разделе Var?

Объявить два интерфейса. Объявить два класса, первый из которых реализует один из интерфесов, а второй - оба - C#
Помогите написать программу,несеку фишку.Объявить два интерфейса. Объявить два класса, первый из которых реализует один из интерфесов, а...

В каком разделе математики искать ответы на следующую задачу - Математика
Выполняемая работа А=А1+А2+А3+...+Аn; Расход ресурса на эту работу Р=Р1+Р2+Р3+...+Рn. Удельный расход ресурса Уд=Р/А, соответственно...

5
quwy
Native x86
3333 / 2180 / 597
Регистрация: 13.02.2013
Сообщений: 7,239
06.06.2014, 16:50 #2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TFunc = function (x: real): real;
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure DrawGraph(f: TFunc; a: real; b: real; C: TCanvas);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.DrawGraph(f: TFunc; a: real; b: real; C: TCanvas);
var 
  x, y, h: real;
  max, min: real;
  sx, sy: real;
  xmid, ymid: integer;
begin
 sx := (c.ClipRect.Right)/(b-a);
 h := 1/sx;
 xmid := c.ClipRect.Right div 2;
 ymid := c.ClipRect.Bottom div 2;
 x := a;
 max := f( x);
 min := max;
 
 while x<=b do
  begin
   y := f( x);
   if y<min then min := y;
   if y>max then max := y;
   x := x + h;
  end;
 sy := c.ClipRect.Bottom/ (max-min);
 c.Brush.Color := clBlack;
 c.FillRect(Rect(0, 0, c.ClipRect.Right, c.ClipRect.Bottom));
  c.Pen.Color := clYellow;
  c.MoveTo(0, ymid);
 c.LineTo(c.ClipRect.Right, ymid);
 c.MoveTo(xmid, 0);
 c.LineTo(xmid, c.ClipRect.Bottom);
  x := a;
  y := f(x);
  c.Pen.Color := clWhite;
  c.MoveTo(xmid+round(sx*x), ymid-round(sy*y));
  while x<=b do
  begin
    y := f(x);
    c.LineTo(xmid+round(sx*x), ymid-round(sy*y));
    x := x + h;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Brush.Style:=bsCross;
  Canvas.Brush.Color:=clRed;
  Canvas.Pen.Color:=clRed;
  Canvas.Ellipse(100,100,300,200);
end;
 
end.
1
northener
пофигист широкого профиля
3244 / 2296 / 496
Регистрация: 15.07.2013
Сообщений: 13,541
06.06.2014, 17:13 #3
Если в другом модуле эта функция не нужна её можно и не объявлять.
1
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
06.06.2014, 18:14  [ТС] #4
А как их правильно вообще обьявлять? Я имено с Дельфи почти некак, незнаком. Принцип классов в общем понимаю, но тут много особеностей. Почти наугад делаю. Вот тоже вышла ошибка
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
 
 
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 
 
 
 
 Type TFunc = function (x: real): real;
procedure DrawGraph (f: TFunc; a: real; b: real; C: TCanvas);
 
var x, y, h: real;
    max, min: real;
    sx, sy: real;
    xmid, ymid: integer;
 
begin
 sx := (c.ClipRect.Right)/(b-a);
 h := 1/sx;
 xmid := c.ClipRect.Right div 2;
 ymid := c.ClipRect.Bottom div 2;
 x := a;
 max := f( x);
 min := max;
 
 while x<=b do
  begin
   y := f( x);
   if y<min then min := y;
   if y>max then max := y;
   x := x + h;
  end;
 sy := c.ClipRect.Bottom/ (max-min);
 c.Brush.Color := clBlack;
 c.FillRect(Rect(0, 0, c.ClipRect.Right, c.ClipRect.Bottom));
  c.Pen.Color := clYellow;
  c.MoveTo(0, ymid);
 c.LineTo(c.ClipRect.Right, ymid);
 c.MoveTo(xmid, 0);
 c.LineTo(xmid, c.ClipRect.Bottom);
  x := a;
  y := f(x);
  c.Pen.Color := clWhite;
  c.MoveTo(xmid+round(sx*x), ymid-round(sy*y));
  while x<=b do
  begin
    y := f(x);
    c.LineTo(xmid+round(sx*x), ymid-round(sy*y));
    x := x + h;
  end;
end;
 //ГЂ òåïåðü, åñëè Âû Г·ГҐГЈГ®-ëèáî Г*ГҐ ГЇГ®Г*ÿëè, Г¤Г*ГўГ*éòå Г°Г*çáåðåì
  end;
 
 
  Canvas.Brush.Style:=bsCross;
  Canvas.Brush.Color:=clRed;
  Canvas.Pen.Color:=clRed;
  Canvas.Ellipse(100,100,300,200);
 
end;
 
end.
[Error] Unit1.pas(19): 'END' expected but 'VAR' found
[Error] Unit1.pas(32): Statement expected but 'TYPE' found
[Error] Unit1.pas(76): '.' expected but ';' found
[Error] Unit1.pas(91): Text after final 'END.' - ignored by compiler
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Добавлено через 10 минут
Ага. Undeclared identifier TFunc
0
northener
пофигист широкого профиля
3244 / 2296 / 496
Регистрация: 15.07.2013
Сообщений: 13,541
06.06.2014, 21:05 #5
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Undeclared identifier TFunc
Нафига он вообще нужен?
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
А как их правильно вообще обьявлять?
См. пример выше В каком разделе класса объявить функцию?
0
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
06.06.2014, 22:00  [ТС] #6
В варианте, предложеном quwy, код работает неадекватно. А именно, там вроде координатная ось должна быть. Рисоваться. Многого не хватает!

Добавлено через 15 минут
Так. Кажется, функция описана. Как ее вызвать для работы? Так не выходит
C++
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
begin
   function;
  Canvas.Brush.Style:=bsCross;
  Canvas.Brush.Color:=clRed;
  Canvas.Pen.Color:=clRed;
  Canvas.Ellipse(100,100,300,200);
end;
 
end.

И не так
C++
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
begin
   TFunc;
  Canvas.Brush.Style:=bsCross;
  Canvas.Brush.Color:=clRed;
  Canvas.Pen.Color:=clRed;
  Canvas.Ellipse(100,100,300,200);
end;
 
end.
И не так
C++
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
begin
   function (x: real): real;
  Canvas.Brush.Style:=bsCross;
  Canvas.Brush.Color:=clRed;
  Canvas.Pen.Color:=clRed;
  Canvas.Ellipse(100,100,300,200);
end;
 
end.

Не знаю как запустить функцию в работу!! Код компилится, но функция не работает.
0
06.06.2014, 22:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 22:00
Привет! Вот еще темы с ответами:

Вывести меню в зависимости от того в каком разделе сайта находишься - 1С Битрикс
Доброго времени суток, хотелось бы узнать как вывести меню для определенного раздела сайта. Меню у меня выводится из инфоблока...

Не могу разобраться в каком разделе искать. Ищу темы по созданию мультиков - Графика и игры
Много терминов которые в первый раз вижу, по этому затрудняюсь найти нужный мне раздел.)

MFC: 2 класса, невозможно объявить поле в классе 2 типа первого класса. - Visual C++
Подскажите, пожалуйста, в чем ошибка Есть 1 й класс: class time { int h; int m; }

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов - C++
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru