Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2008, 16:41   #1
Albert2008
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 26
По умолчанию Procedure,function,Stringgrid (#004) Очередной вопрос начинающего.

1. Когда мы задаём процедуру (т.е. Дельфи её герирует автоматически), почему мы не можем написать что-нибудь вроде StringGrid1DrawCellMYPROC ??? Ведь во всех учебниках пишется, что процедура(или функция) задаётся следующим образом:
Procedure MyProc(a,b,c :integer);
function myf(var a,b,c :integer; Edit1:string) : integer;


Где Procedure или function - зарезервированные слова, означающие объявление процедуры или функции. (var a,b,c :integer; Edit1:string) - описание параметров. (Кстати что тут писать, что бы возвращаемыми параметрами были координаты строк , столбцов ячееу в StringGrid, а также цвет, которым они закрашиваются)

2 Почему при задаче процедур и функций они не могут сделать следующее:
function myf(var a,b,c :integer) : integer;
begin
a:=5;
Edit1.Text := IntToStr(a); (ошибка здесь (Record object or class type required)
end;
Т.е. я хочу например, чтобы функция отрисовывающая ячейки в красный увет ко всему прочему ещё могла производить запись в массив и в Edit


P.S. Всем тем, кто сумел дочитать всё это до сюда и не назвать всё матершинным словом объявляю благодарность.
Albert2008 вне форума Ответить с цитированием
Старый 01.08.2008, 16:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
почему мы не можем написать что-нибудь вроде StringGrid1DrawCellMYPROC ???
Че эт не иожем? Все мы можем - Любую процедуру ты мошешь назвать как душе угодно в рамках правил типа зарезервированных слов
Цитата:
то бы возвращаемыми параметрами были координаты строк , столбцов ячееу в StringGrid, а также цвет, которым они закрашиваются
Это ты луче определи новый тип вроде:
Код:
NewuTipe=record
 x,y:integer
 cell:string;
 colora:Tcolor
end;
И пусть твоя процедура возвращает этот тип:
Код:
function myf(var a,b,c :integer; Edit1:string) : NewuTipe;
ТОгда моно либо описать переменку такого типа:
Код:
var a:NewuTipe
...
a=myf(1,2,3,'adas');
либо по отдельности получать:
Код:
var i:integer;
i:=myf(1,2,3,'adas').x
Цитата:
Почему при задаче процедур и функций они не могут сделать следующее:
Все могут, просто нужно прописывать "полный путь к Эдиту"
вроде как:
Цитата:
function myf(var a,b,c :integer) : integer;
begin
a:=5;
form1.Edit1.Text := IntToStr(a); (ошибка здесь (Record object or class type required)
end;
Или включать эту процу в обьект формы
I'm learning to live...

Последний раз редактировалось Stilet; 01.08.2008 в 16:59.
Stilet вне форума Ответить с цитированием
Старый 01.08.2008, 18:31   #3
Albert2008
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 26
Подмигивание

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это ты луче определи новый тип вроде:
Код:
NewuTipe=record
 x,y:integer
 cell:string;
 colora:Tcolor
end;
И пусть твоя процедура возвращает этот тип:
Код:
function myf(var a,b,c :integer; Edit1:string) : NewuTipe;
Я сделал вот так вот.

Код:
unit Unit1;

interface

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

type
    NewuTipe=record    //начинаем создание нового типа данных
    x,y:integer    ; //вероятно это строки и столбцы.
     cell : string  ;  //Что это такое я так и не понял.
    colora:Tcolor    ;
    end;  //заканчиваем





  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b,c,x,y : integer;

implementation

{$R *.dfm}
 function myf(var a,b :integer; Edit1:string) : NewuTipe; // а здесь надо a,b т.к. мы в type задавали или можно x,y ?
 begin
 form1.Edit1.Text := IntToStr(a); //здесь он ошибку пока не показал;) 
 end;
procedure TForm1.FormCreate(Sender: TObject);
begin
a:=7 ;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
myf(1,2,'4');// А вот в этом самом месте (перед цыфрой2) он пишет: Typeas of actual formal var parameters must be identical :mad: :mad: 
end;

end.
Albert2008 вне форума Ответить с цитированием
Старый 01.08.2008, 18:32   #4
Albert2008
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 26
По умолчанию

Всё вроде правильно. А он не компилится.... Подскажите пожалуйста.
Albert2008 вне форума Ответить с цитированием
Старый 01.08.2008, 21:30   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

у тебя параметры описаны как var, т.е. изменяемые внутри функции, а ты туда константы передаешь. надо не 1 и 2 передавать, а переменные типа integer или var убрать надо
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с многомерными массивами в функции. Очередной вопос начинающего (#005) Albert2008 Компоненты Delphi 14 13.08.2008 22:03
Stringgrid, Procedure, cells[m,n]:=DynMas[a,b]. Очередной вопрос начинающего (#003) Albert2008 Компоненты Delphi 4 04.08.2008 12:00
Stringgrid, cells[m,n] и двумерные массивы.(#002) Очередной вопрос начинающего. Albert2008 Компоненты Delphi 4 28.07.2008 19:02
Видимо очередной вопрос по БД... Amaranth Помощь студентам 1 16.12.2007 00:56
function procedure Toxa Microsoft Office Access 1 28.11.2007 18:32