На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Ругается на AssignFile
    Добрый день!
    Непойму в чем ошибка. В моем приложении этот код не компилится:
    ExpandedWrap disabled
      procedure TfrmProfile.Button1Click(Sender: TObject);
      var   F1: file of byte;
      begin
         AssignFile(F1, '123.raw');
      end;


    Создаю пустой проект с одной кнопкой все ок.
    Это глюк или что?
    Сообщение отредактировано: intaari -
      Выложи проект. Какую ошибку выдает?
        Какую ошибку-то выдает компилятор?
          Kostyan88.
          [Error] MainProfile.pas(230): There is no overloaded version of 'AssignFile' that can be called with these arguments

          Добавлено
          ExpandedWrap disabled
            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.
            Поскольку умных мыслей пока нет буду высказывать бредовые, может F1 какая-нить зарезервированная переменная? попробуй дать ей другое имя
              Kostyan88. Спасибо за отзыв, но я имя менял. Весь прикол в том, что если переменную объявитькак
              ExpandedWrap disabled
                F1: textfile;
              . то все окей. как только я ее объявляю как byte - ошибка.
                CloseFile(F1); ?
                  Kostyan88. Да, но ведь компилятор не ропускает, есть CloseFile(F1) или нет все равно.

                  Добавлено
                  Причина в нутри TApdComPort.
                  как только я его убрал с формы, все ОК. Но он мне нужен.
                  Вопрос как мне тогда реализовать запись по 7 байт в файл, а потом их оттуда по 7 байт читать.?
                  Сообщение отредактировано: intaari -
                    intaari, а если попробовать
                    ExpandedWrap disabled
                      System.AssignFile(f1,'123.raw');
                      SeaGirl. Вы ГУРУ!!! вот я балда не догодался. Спасибо.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0582 ]   [ 16 queries used ]   [ Generated: 27.07.25, 18:37 GMT ]