Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.06.2011, 18:35
deadsoulf deadsoulf вне форума
Прохожий
 
Регистрация: 23.06.2011
Сообщения: 7
Репутация: 10
Вопрос Передача записи как параметра в процедуру

Добрый день всем. Прошу помощи со следующим:

Код:
unit Control;

interface

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

type
  CommandType = record	{Тип команда}
    Address: byte;
    Checksum: byte;
    Comm1,Comm2: byte;
    NData: byte;
    Data1, Data2, Data3, Data4, Data5, Data6: byte;
  end;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Button3: TButton;
    Button4: TButton;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Label9: TLabel;
    GroupBox3: TGroupBox;
    Button5: TButton;
{    procedure Button1Click(Sender: TObject);}
    procedure StartMove(Sender: TObject);
{    procedure SendSettings(Sender: TObject);}
    procedure Send(Sender: TObject; CommandData: CommandType);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Update: CommandType = (Address:0; Checksum:0; Comm1:0; Comm2:$1A; NData:0; Data1:0; Data2:0; Data3:0; Data4:0; Data5:0; Data6:0);

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Send(Sender: TObject; CommandData: CommandType);
begin
  Close;
end;

procedure TForm1.StartMove(Sender: TObject);
begin
  Send(Sender, Update);  :confused: 
end;

{procedure TForm1.Button1Click(Sender: TObject);
begin
  SendSettings(Sender);

end;}

end.
Админ: Учимся пользоваться тегами по назначению!

Вылезает ошибка
Incompatible types: 'CommandType' and 'procedure, untyped pointer or untyped parameter'
с указанием на строку, где стоит

Последний раз редактировалось Admin, 23.06.2011 в 18:38.
Ответить с цитированием
  #2  
Старый 23.06.2011, 19:32
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
Send(Sender, Control.Update);
вообще желательно имя изменить, т.к. Update это метод класса TWinControl, а TForm является его наследником.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 23.06.2011, 20:14
deadsoulf deadsoulf вне форума
Прохожий
 
Регистрация: 23.06.2011
Сообщения: 7
Репутация: 10
По умолчанию

Спасибо, NumLock!
Сделал по вашему указанию, теперь ошибка

[Fatal Error] Control_Project1.dpr(10): Internal error: SY576

сначала указывал на строку Application.Initialize;
когда попытался сделать Build - стал указывать тремя одинаковыми ошибками на строку

Код:
type
  CommandType = record	{Тип команда}
    Address: byte;   <-----
    Checksum: byte;
    Comm1,Comm2: byte;
    NData: byte;
    Data1, Data2, Data3, Data4, Data5, Data6: byte;
  end;

Люди в интернетах пишут, что это внутренняя ошибка компилятора, и ничего с этим не сделать. Действительно ли ничего и следует как-то иначе составлять код (например, используя массивы вместо записей)?
Ответить с цитированием
  #4  
Старый 23.06.2011, 20:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Delphi закрой и запусти заново.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 24.06.2011, 10:09
deadsoulf deadsoulf вне форума
Прохожий
 
Регистрация: 23.06.2011
Сообщения: 7
Репутация: 10
По умолчанию

Так и сделал, действительно помогло.

Благодарность NumLock'у.
Ответить с цитированием
  #6  
Старый 24.06.2011, 12:34
deadsoulf deadsoulf вне форума
Прохожий
 
Регистрация: 23.06.2011
Сообщения: 7
Репутация: 10
По умолчанию

Проблема усложняется.

Возможно ли задать константу в виде записи, одно из полей которых не строковый массив (с точки зрения принципа)?
Код:
ype
  CommandType = record	{Тип команда}
    Address: byte;
    Checksum: byte;
    Comm1,Comm2: byte;
    NData: byte;
    Data: array[1..6] of byte;
  end;
и затем
Код:
const
  Upd: CommandType = (Address:0; Checksum:0; Comm1:0; Comm2:$1A; NData:0; Data[1]:0; Data[2]:0; Data[3]:0; Data[4]:0; Data[5]:0; Data[6]:0);
Как это сделать синтаксически верно?
Ответить с цитированием
  #7  
Старый 24.06.2011, 12:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
const
  Upd: CommandType = (Address:0; Checksum:0; Comm1:0; Comm2:$1A; NData:0; Data:(1, 2, 3, 4, 5, 6));
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 29.06.2011, 18:43
deadsoulf deadsoulf вне форума
Прохожий
 
Регистрация: 23.06.2011
Сообщения: 7
Репутация: 10
По умолчанию

NumLock, спасибо еще раз за отзывчивость!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter