
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.188] |
![]() |
|
![]() |
|
|
Добрый день!
Непойму в чем ошибка. В моем приложении этот код не компилится: ![]() ![]() procedure TfrmProfile.Button1Click(Sender: TObject); var F1: file of byte; begin AssignFile(F1, '123.raw'); end; Создаю пустой проект с одной кнопкой все ок. Это глюк или что? |
Сообщ.
#2
,
|
|
|
Выложи проект. Какую ошибку выдает?
|
Сообщ.
#3
,
|
|
|
Какую ошибку-то выдает компилятор?
|
Сообщ.
#4
,
|
|
|
Kostyan88.
[Error] MainProfile.pas(230): There is no overloaded version of 'AssignFile' that can be called with these arguments Добавлено ![]() ![]() unit MainProfile; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles, AdPacket, OoMisc, AdPort, Grids, Mask; type TfrmProfile = class(TForm) btnSeting: TButton; btnForward: TButton; btnBack: TButton; btnExit: TButton; lblHelp: TLabel; Bevel1: TBevel; Bevel2: TBevel; prtOLD: TApdComPort; dpktOLD: TApdDataPacket; pnlMode: TPanel; rbtnWork: TRadioButton; rbtnTest: TRadioButton; pnlWork: TPanel; rbtnCheckWrite: TRadioButton; rbtnDateRead: TRadioButton; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; edtOperator: TEdit; cmbxQuantityZond: TComboBox; edtCountRead: TEdit; edtDate: TEdit; pnlReadCodes: TPanel; Label1: TLabel; Label6: TLabel; Label8: TLabel; Label9: TLabel; StaticText1: TStaticText; StaticText2: TStaticText; ApdComPort1: TApdComPort; Label10: TLabel; pnlReadInformation: TPanel; Label11: TLabel; lblFactoryNumber: TStaticText; pnlEnterStartDataSounding: TPanel; StrgrdEnterStartDataSounding: TStringGrid; lblCount: TStaticText; lblkodIKD: TStaticText; lblkodIKT: TStaticText; lblkodIKP: TStaticText; StrgrdReadInformation: TStringGrid; MaskEdit1: TMaskEdit; Button1: TButton; procedure btnExitClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure rbtnWorkClick(Sender: TObject); procedure btnForwardClick(Sender: TObject); procedure btnSetingClick(Sender: TObject); procedure dpktOLDPacket(Sender: TObject; Data: Pointer; Size: Integer); procedure rbtnCheckWriteClick(Sender: TObject); procedure StrgrdEnterStartDataSoundingGetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure StrgrdEnterStartDataSoundingSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); private procedure GetIni; { Private declarations } public { Public declarations } end; var frmProfile: TfrmProfile; OperatingCondition:boolean=true;//true - "Работа с ПУ"/false - "Тестирование ПУ" CheckWriteMode:boolean=true;//true - "Подготовка к зондированию"/false - "Прием записанной информации" CounterStaffs: integer=0;//счетчик кадров CounterHeadings: integer=0;//счетчик заголовков CounterEndInformation: integer=0;//счетик конца информационного массива Headings:boolean=true; implementation {$R *.dfm} //запись в ini файл и установка параметров {procedure SaveIni; var IniFile: TIniFile; begin IniFile := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Meteo.ini'); ////////Запись Настроек порта PTB200/////////////////// if DataModulePTB.PTB_Port.Open then iniFile.Writeinteger('Parametrs PTB200', 'COM Number', DataModulePTB.PTB_Port.ComNumber) else iniFile.Writeinteger('Parametrs PTB200', 'COM Number', 0); IniFile.WriteInteger('Parametrs PTB200', 'Baud', DataModulePTB.PTB_Port.Baud); IniFile.WriteInteger('Parametrs PTB200', 'DataBits', DataModulePTB.PTB_Port.DataBits); IniFile.Writeinteger('Parametrs PTB200', 'parity', frmSet.CBPTBparity.ItemIndex); IniFile.WriteInteger('Parametrs PTB200', 'StopBits', DataModulePTB.PTB_Port.StopBits); IniFile.WriteString('Parametrs PTB200', 'TimeOut', frmSet.medtTimeOutPTB.Text ); IniFile.WriteString('Parametrs PTB200', 'Altitude', frmMeteo.lblAltitude.Caption); IniFile.Free; end; } //////////////////////////////////////////////////////////////////////////////// // чтение из ini файла и установка параметров procedure TfrmProfile.GetIni; var IniFile: TIniFile; strQuantityOLD:string; begin IniFile := TIniFile.Create(ExtractFilePath(Application.Exename)+ 'Profile.ini'); //Выдача Номера порта/////////////////// if IniFile.Readinteger('Seting', 'Port Number', 1)<>0 then try prtOLD.ComNumber:=IniFile.Readinteger('Seting', 'Port Number', 1); PrtOLD.Open:=true; except PrtOLD.Open:=false; PrtOLD.ComNumber:=0; end; //Чтение Поля Operator////////////////////// frmProfile.edtOperator.Text:=IniFile.Readstring('Seting', 'Operator', 'Оператор'); //Чтение поля Instrumens////////////////////// if Pos(',', IniFile.Readstring('Seting', 'Instrumens', ''))=0 then frmProfile.cmbxQuantityZond.Text:=IniFile.Readstring('Seting', 'Instrumens', '') else begin strQuantityOLD:=IniFile.Readstring('Seting', 'Instrumens', '')+','; while Pos(',', strQuantityOLD) > 0 do begin frmProfile.cmbxQuantityZond.Items.Add(copy(strQuantityOLD,1,Pos(',', strQuantityOLD)-1)); Delete(strQuantityOLD,1,Pos(',',strQuantityOLD)); end; frmProfile.cmbxQuantityZond.ItemIndex:=0; end; IniFile.Free; end; procedure TfrmProfile.btnExitClick(Sender: TObject); begin Close; end; procedure TfrmProfile.FormShow(Sender: TObject); begin edtDate.Text:=dateTostr(now); GetIni; end; procedure TfrmProfile.rbtnWorkClick(Sender: TObject); begin cmbxQuantityZond.Enabled:=rbtnWork.Checked; Label4.Enabled:=rbtnWork.Checked; //Если работа то true OperatingCondition:=rbtnWork.Checked; end; procedure TfrmProfile.btnForwardClick(Sender: TObject); var F1: file of byte; begin if btnForward.Focused then frmProfile.Tag:=frmProfile.Tag+1 else frmProfile.Tag:=frmProfile.Tag-1; Label10.Caption:=inttostr(frmProfile.Tag); case frmProfile.Tag of 0: begin //Панель выбора режима работы. "Тестирование ПУ" или "Работа с ПУ" Caption:='ПРОФИЛЬ 2006 - Выбор режима работы'; lblHelp.Caption:='Выбирите режим работы с погружным устройством. Произведите заполнение всех полей. Проверте текущие установки станции и погружного устройства.'; pnlMode.BringToFront; btnBack.Enabled:=false; end; 1: begin // Если выбрано "Работа с ПУ" то OperatingCondition=true if OperatingCondition then begin Caption:='ПРОФИЛЬ 2006 - Работа с ПУ'; lblHelp.Caption:='Выбирите один из 2-х режимов. ПОДГОТОВКА К ЗОНДИРОВАНИЮ или ПРИЕМ ЗАПИСАННЙ ИНФОРМАЦИИ.'; pnlWork.BringToFront; end else begin Caption:='ПРОФИЛЬ 2006 - Прием текущих кодов'; lblHelp.Caption:='Установите герметичный переключатель режимов погружного устройства в положение "К". Для окончания приема текущих кодов нажмите любую клавишу.'; pnlReadCodes.BringToFront; //Иницализация пакета dpktOLD.Enabled:=false; dpktOLD.StartString:=#0+'ж'; dpktOLD.Enabled:=true; //Очистка всех окон на панели pnlReadCodes lblCount.Caption:=''; lblkodIKP.Caption:=''; lblkodIKT.Caption:=''; lblkodIKD.Caption:=''; //сброс счетчиков заголовков и кадров CounterStaffs:=0; CounterHeadings:=0; //заголовок не читать Headings:=false; end; btnBack.Enabled:=true; end; 2: begin if CheckWriteMode then begin Caption:='ПРОФИЛЬ 2006 - Прием текущих кодов'; lblHelp.Caption:='Установите герметичный переключатель режимов погружного устройства в положение "К".'; pnlReadCodes.BringToFront; //Иницализация пакета dpktOLD.Enabled:=false; dpktOLD.StartString:=#0+'ж'; dpktOLD.Enabled:=true; //Очистка всех окон на панели pnlReadCodes lblCount.Caption:=''; lblkodIKP.Caption:=''; lblkodIKT.Caption:=''; lblkodIKD.Caption:=''; //сброс счетчиков заголовков и кадров CounterStaffs:=0; CounterHeadings:=0; //заголовок не читать Headings:=false; end; if not CheckWriteMode or not OperatingCondition then begin AssignFile(F1, '123.raw'); // IF FileExists('temp.raw') // then Append(F1) // else Rewrite(F1); Caption:='ПРОФИЛЬ 2006 - Прием записанной информации'; lblHelp.Caption:='Установите герметичный переключатель режимов погружного устройства в положение "Ч".'; pnlReadInformation.BringToFront; //Очистка всех окон на панели pnlReadInformation lblFactoryNumber.Caption:=''; //сброс счетчиков заголовков и кадров CounterStaffs:=0; CounterHeadings:=0; CounterEndInformation:=0; //Иницализация пакета dpktOLD.Enabled:=false; dpktOLD.StartString:=#0+'ж'; dpktOLD.Enabled:=true; //флаг поиска заголовков по биту состояния Headings:=true; //заполнение шапки таблицы with StrgrdReadInformation do begin StrgrdReadInformation.RowCount:=2; StrgrdReadInformation.Rows[1].Clear; ColWidths[0]:=50; Cells[0,0]:='№ п/п'; ColWidths[1]:=210; Cells[1,0]:='Апп. номер зондирования'; ColWidths[2]:=120; Cells[2,0]:='Число кадров'; ColWidths[3]:=120; Cells[3,0]:='Код давления'; end; end; end; 3: begin if not OperatingCondition or not CheckWriteMode then begin dpktOLD.Enabled:=false; Caption:='ПРОФИЛЬ 2006 - Данные начала зондирования'; lblHelp.Caption:='Установите герметичный переключатель режимов погружного устройства в положение "Ч".'; pnlEnterStartDataSounding.BringToFront; WITH StrgrdEnterStartDataSounding do begin SetFocus; ColWidths[0]:=30; Cells[0,0]:='№'; ColWidths[1]:=75; Cells[1,0]:='Дата'; ColWidths[2]:=75; Cells[2,0]:='Время'; ColWidths[3]:=110; Cells[3,0]:='Широта'; ColWidths[4]:=110; Cells[4,0]:='Долгота'; ColWidths[5]:=75; Cells[5,0]:='Глубина'; end end; btnForward.Caption:='Далее >' end; 4: btnForward.Caption:='Конец'; 5:btnExitClick(Sender); end; end; procedure TfrmProfile.btnSetingClick(Sender: TObject); begin // dpktOLD.Enabled:=false; // dpktOLD.StartString:=#0+'ж'; // dpktOLD.Enabled:=true; ApdComPort1.PutString(#0+'ж0'+#0#0+'я'+#0); ApdComPort1.PutString(#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'); ApdComPort1.PutString(#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'); ApdComPort1.PutString(#0+'ж'+#0+'№|©'#184); ApdComPort1.PutString(#0+'ж0'+#0#0+'я'+#0); ApdComPort1.PutString(#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'); ApdComPort1.PutString(#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'); ApdComPort1.PutString(#0+'ж'+#0+'№|©'#184); ApdComPort1.PutString(#0+'ж0'+#0#0+'я'+#0); ApdComPort1.PutString(#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'); ApdComPort1.PutString(#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'); ApdComPort1.PutString(#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'+#0+'ж'+#0+'№|©°'); ApdComPort1.PutString(#0+'ж'+#35#134+'|©'#172); ApdComPort1.PutString(#0+'ж'+#35#134+'|©'#172); //label10.Caption:=inttostr(($AC and $4)); end; procedure TfrmProfile.dpktOLDPacket(Sender: TObject; Data: Pointer; Size: Integer); var Buffer: array[0..4] of byte; begin Move(Data^, Buffer[0], Size); if (caption='ПРОФИЛЬ 2006 - Прием записанной информации') and Headings=true //Buffer[4]=0 //Если 7 байт нулевой то это заголовок кадра then //прием заголовка блока записи begin Headings:=false; lblFactoryNumber.Caption:=inttostr(Buffer[1] shl 8+Buffer[0]); //увеличиваем счетчик принятых заголовков(файлов) inc(CounterHeadings); //Заполнение таблицы if CounterHeadings>1 then begin StrgrdReadInformation.RowCount:=StrgrdReadInformation.RowCount+1; StrgrdEnterStartDataSounding.RowCount:=StrgrdReadInformation.RowCount; // StrgrdEnterEndDataSounding.RowCount:=StrgrdReadInformation.RowCount; end; //запись в таблицу "прием информации" порядкового номера заголовка блока StrgrdReadInformation.Cells[0,CounterHeadings]:=inttostr(CounterHeadings); //запись в таблицу "данные начала зондиования" порядкового номера (заголовка блока) StrgrdEnterStartDataSounding.Cells[0,CounterHeadings]:=inttostr(CounterHeadings); //запись в таблицу "прием информации" номера зондирования из зонда StrgrdReadInformation.Cells[1,CounterHeadings]:=inttostr(Buffer[3] shl 8+Buffer[2]); //обнуляем счетчик кадров CounterStaffs:=0; end else begin//прием кадров информации inc(CounterStaffs);//Увеличение счетчика кадров if caption='ПРОФИЛЬ 2006 - Прием текущих кодов' then begin lblCount.Caption:=inttostr(CounterStaffs); lblkodIKD.Caption:=inttostr((Buffer[0] shl 8 or ((Buffer[1] shr 4) shl 4))shr 4); lblkodIKT.Caption:=inttostr(Buffer[1] and $f shl 8 or Buffer[2]); lblkodIKP.Caption:=inttostr((Buffer[3] shl 8 or ((Buffer[4] shr 4) shl 4))shr 4); end else begin StrgrdReadInformation.Cells[2,CounterHeadings]:=inttostr(CounterStaffs); StrgrdReadInformation.Cells[3,CounterHeadings]:=inttostr((Buffer[0] shl 8 or ((Buffer[1] shr 4) shl 4))shr 4); end; //при приеме бита (m=1), признака конца записи активируем расшифровку след 7 байт как заголовок if (Buffer[4] and $8=8) and not (Buffer[4] and $4=4) then Headings:=true; //при преме m=1 and f=1 выводим сообщение о конце приема всей информации if Buffer[4] and $C=12 then inc(CounterEndInformation); if CounterEndInformation=2 then begin lblHelp.Caption:='ПРИЕМ ИНФОРМАЦИИ ЗАКОНЧЕН'; dpktOLD.Enabled:=false; Abort; end; end; //выкл/вкл пакета dpktOLD.Enabled:=false; dpktOLD.Enabled:=true; end; procedure TfrmProfile.rbtnCheckWriteClick(Sender: TObject); begin //Если работа то true CheckWriteMode:=rbtnCheckWrite.Checked; end; procedure TfrmProfile.StrgrdEnterStartDataSoundingGetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); begin if StrgrdEnterStartDataSounding.Cells[ACol, 0] = 'Дата' then Value := '!99/99/0000;1'; if StrgrdEnterStartDataSounding.Cells[ACol, 0] = 'Время' then Value := '!90:00;1'; if StrgrdEnterStartDataSounding.Cells[ACol, 0] = 'Широта' then Value := '!#99:99''00";1'; if StrgrdEnterStartDataSounding.Cells[ACol, 0] = 'Долгота' then Value := '!#99:99''00";1'; if StrgrdEnterStartDataSounding.Cells[ACol, 0] = 'Глубина' then Value := '!9999;1'; end; procedure TfrmProfile.FormClose(Sender: TObject; var Action: TCloseAction); begin prtOld.Open:=false; ApdComPort1.Open:=prtOld.Open; Action:=cafree; end; procedure TfrmProfile.StrgrdEnterStartDataSoundingSetEditText( Sender: TObject; ACol, ARow: Integer; const Value: String); begin { if StrgrdEnterStartDataSounding.Cells[ACol, 0] = 'Дата' then try strtodate(Value) except ShowMessage('некорректная дата'); StrgrdEnterStartDataSounding.Cells[ACol, ARow]:=datetostr(now); end; } end; end. |
Сообщ.
#5
,
|
|
|
Поскольку умных мыслей пока нет буду высказывать бредовые, может F1 какая-нить зарезервированная переменная? попробуй дать ей другое имя
|
Сообщ.
#6
,
|
|
|
Kostyan88. Спасибо за отзыв, но я имя менял. Весь прикол в том, что если переменную объявитькак
![]() ![]() F1: textfile; |
Сообщ.
#7
,
|
|
|
CloseFile(F1); ?
|
![]() |
|
|
Kostyan88. Да, но ведь компилятор не ропускает, есть CloseFile(F1) или нет все равно.
Добавлено Причина в нутри TApdComPort. как только я его убрал с формы, все ОК. Но он мне нужен. Вопрос как мне тогда реализовать запись по 7 байт в файл, а потом их оттуда по 7 байт читать.? |
Сообщ.
#9
,
|
|
|
intaari, а если попробовать
![]() ![]() System.AssignFile(f1,'123.raw'); |
Сообщ.
#10
,
|
|
|
SeaGirl. Вы ГУРУ!!! вот я балда не догодался. Спасибо.
|