Insert('U',kadr,uslovie);
end;
end;
uslovie:= pos('K',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'K',vyh);
if oshibka = 1 then
else
begin
K:= StrToFloat(vyh) * 1000;
K:= Int(K); // Отбрасываем дробную часть
preobrazovanieVM(K,kadr);
end;
end;
X_pred:= X_nast;
Y_pred:= Y_nast;
end;
procedure PC_VM(var kadr: string);
var
uslovie: integer;
I_est: boolean;
s, st: string;
begin
if (pos('%', kadr) <> 0) or (pos('$', kadr) <> 0) then exit;
I_est:= False;
if (pos('I',kadr) <> 0) or (pos('J',kadr) <> 0) then I_est:= true;
if pos('X',kadr) <> 0 then
begin
NaytiKoordinatu(kadr,'X',vyh);
if oshibka = 1 then
else
begin
X_nast:= StrToFloat(vyh) * 1000;
X_nast:= Int(X_nast); // Отбрасываем дробную часть
preobrazovanieVM(X_nast,kadr);
end;
end
else
if I_est then
begin
uslovie:= pos('Y',kadr); // Преобразуем в число строку
insert('X' + FloatToStr(X_pred), kadr, uslovie);
end;
if pos('Y',kadr) <> 0 then
begin
NaytiKoordinatu(kadr,'Y',vyh);
if oshibka = 1 then
else
begin
Y_nast:= StrToFloat(vyh) * 1000;
Y_nast:= Int(Y_nast); // Отбрасываемдробнуючасть
preobrazovanieVM(Y_nast,kadr);
end;
end
else
if I_est then
begin
uslovie:= pos('I',kadr); // Преобразуем в число строку
insert('Y' + FloatToStr(Y_pred), kadr, uslovie);
end;
if (pos('G42', kadr) <> 0) or (pos('G41', kadr) <> 0) then
begin
try
s:= Stroka.Strings[Succ(m)]; // ошибканетстрокивообще
except
on EStringListError do // добавляемпустуюстрокуиисключаемошибку
stroka.Add('');
end;
if pos('X', kadr) = 0 then
begin // Вставка Х и Y если нет
NaytiKoordinatu(Stroka.Strings[Succ(m)], 'X', s);
if oshibka <> 1 then
begin
uslovie:= FindVstavki('X', kadr);
s:= TrimRight(s);
X_nast:= StrToFloat(s) * 1000; // Впозиции X Y I J F M
Insert('X' + FloatToStr(X_nast), kadr, uslovie);
end
else
begin
X_nast:= X_pred;
uslovie:= FindVstavki('X', kadr); // Впозиции X Y I J F M
Insert('X' + FloatToStr(X_nast), kadr, uslovie);
end;
end;
if pos('Y', kadr) = 0 then
begin
uslovie:= FindVstavki('Y', kadr);
NaytiKoordinatu(Stroka.Strings[Succ(m)], 'Y', s);
s:= TrimRight(s);
Y_nast:= StrToFloat(s) * 1000;
Insert('Y' + FloatToStr(Y_nast), kadr, uslovie);
end;
if (pos('I', Stroka.Strings[Succ(m)]) <> 0) and (pos('J', Stroka.Strings[Succ(m)]) <> 0)
then
begin
Naytikoordinatu(Stroka.Strings[Succ(m)], 'I', st);
I:= StrToFloat(st);
Naytikoordinatu(Stroka.Strings[Succ(m)], 'J', st);
J:= StrToFloat(st);
Podhod_G41_G42_radius;
J:= J * 1000;
J:= Int(J);
if (I_sled = -1) and (J > 0) then J:= -J;
if (I_sled = 1) and (J < 0) then J:= -J;
if Pos('I', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'I', s);
PreobrazovanieVM(J, kadr);
end
else
begin
uslovie:= FindVstavki('I', kadr);
Insert('I' + FloatToStr(J), kadr, uslovie);
end;
I:= I * 1000;
I:= Int(I);
if(J_sled = -1) and (I > 0) then I:= -I;
if(J_sled = 1) and (I < 0) then I:= -I;
if Pos('J', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'J', s);
PreobrazovanieVM(I, kadr);
end
else
begin
uslovie:= FindVstavki('J', kadr);
Insert('J' + FloatToStr(I), kadr, uslovie);
end;
Exit;
end
else
begin
Podhod_G41_G42_line;
X_sled:= Int(X_sled);
if Pos('X', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'I', s);
PreobrazovanieVM(X_sled, kadr);
end
else
begin
uslovie:= FindVstavki('Y', kadr);
Insert(FloatToStr(X_sled), kadr, uslovie);
end;
Y_sled:= Int(Y_sled);
if Pos('Y', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'J', s);
PreobrazovanieVM(Y_sled, kadr);
X_pred:= X_nast;
Y_pred:= Y_nast;
exit;
end
else
begin
uslovie:= FindVstavki('X', kadr);
Insert(FloatToStr(Y_sled), kadr, uslovie);
end;
end;
end;
if pos('I',kadr) <> 0 then
begin
NaytiKoordinatu(kadr,'I',vyh);
if oshibka = 1 then
else
begin
I:= StrToFloat(vyh) * 1000;
I:= Int(I); // Отбрасываем дробную часть
preobrazovanieVM(I,kadr);
end;
end;
if pos('J',kadr) <> 0 then
begin
NaytiKoordinatu(kadr,'J',vyh);
if oshibka = 1 then
else
begin
J:= StrToFloat(vyh) * 1000;
J:= Int(J); // Отбрасываем дробную часть
preobrazovanieVM(J,kadr);
end;
end;
if pos('Z',kadr) <> 0 then
begin
NaytiKoordinatu(kadr,'Z',vyh);
if oshibka = 1 then
else
begin
Z:= StrToFloat(vyh) * 1000;
Z:= Int(Z); // Отбрасываем дробную часть
preobrazovanieVM(Z,kadr);
end;
end;
uslovie:= pos('A',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'A',vyh);
if oshibka = 1 then
else
begin
A:= StrToFloat(vyh) * 1000;
A:= Int(A); // Отбрасываем дробную часть
preobrazovanieVM(A,kadr);
Delete(kadr, uslovie, 1);
Insert('U',kadr,uslovie);
end;
end;
if pos('K',kadr) <> 0 then
begin
NaytiKoordinatu(kadr,'K',vyh);
if oshibka = 1 then
else
begin
K:= StrToFloat(vyh) * 1000;
K:= Int(K); // Отбрасываем дробную часть
preobrazovanieVM(K,kadr);
end;
end;
X_pred:= X_nast;
Y_pred:= Y_nast;
end;
// НАЧАЛО ОСНОВНОЙ ПРОГРАММЫ obrabotka
begin
if (Form1.NomerKadra.State = cbUnchecked) and (Form1.Probel.State = cbUnchecked) and
(Form1.Pustostr.State = cbUnchecked) and (Form2.Ne_obrabatyvat.Checked) then
begin
ShowMessage(' Обработка не задана ');
Goto metka;
end;
Priz_pusto_memo:= false;
kol:= Memo1.Lines.Count; // Количество строк
if kol = 0 then // Если поле пусто
begin
ShowMessage(' В поле редактирования пусто ');
Goto metka;
end;
memo1mod:= true;
Panel1.Caption:= IntToStr(kol);
buf:= 0; m:= 0; I:= 0; J:= 0;
PolChisla_1Proc:= kol div 100;
uvel:= PolChisla_1Proc;
Indikator.Position:= 0;
Proc:= Succ(Indikator.Position);
u:= 100 div kol;
Proci:= u;
stroka:= TStringList.Create();
stroka.Text:= Memo1.Text;
Memo1.Clear;
repeat
bufer:= stroka.Strings[m];
Panel2.Caption:= IntToStr(Succ(m));
Panel2.Refresh;
if (Form1.Probel.Checked)then
DelProbel(bufer); // Удаляемпробелы
if Form1.NomerKadra.Checked then // включенпереключатель
nomerkadra(bufer);
if Form2.PC_MAYAK.Checked then
pc_mayak(bufer);
if Form2.PC_VM.Checked then
pc_vm(bufer);
if Form2.VM_MAYAK.Checked then
VM_MAYAK(bufer);
if Form2.MAYAK_VM.Checked then
Mayak_vm(bufer);
if kol >= 100 then
begin
if m >= PolChisla_1Proc then
begin
Indikator.Position:= Proc;
Form1.PanelSostoyaniya.Panels[1].Text:= ' Выполнено ' + IntToStr(Indikator.Position) + ' %';
PanelSostoyaniya.Refresh; // Перерисовкапанели
Inc(proc);
PolChisla_1Proc:= PolChisla_1Proc + uvel;
end;
end
else
begin
Indikator.Position:= Proci;
Form1.PanelSostoyaniya.Panels[1].Text:= ' Выполнено ' + IntToStr(Indikator.Position) + ' %';
PanelSostoyaniya.Refresh; // Перерисовкапанели
Inc(proci, u);
end;
stroka.Strings[m]:= bufer; // Длятокарногостанка
if Length(bufer) = 0 then
if Form1.PustoStr.Checked then
pustostroka;
Bufer:= ''; // Очистка строки Буфер
Inc(m); // Следующая строка (+1)
until m >= kol;
Panel1.Caption:= IntToStr(Stroka.Count); // Сколькореальноосталось
Form1.PanelSostoyaniya.Panels[1].Text:= ' Выполнено' + '100' + ' %';
Indikator.Position:= 100;
if (Form2.PC_MAYAK.Checked) or (Form2.PC_VM.Checked) or (Form2.VM_MAYAK.Checked) or (Form2.MAYAK_VM.Checked) then
begin
Form2.PC_VM.Enabled:= false;
Form2.PC_MAYAK.Enabled:= false;
Form2.VM_MAYAK.Enabled:= false;
Form2.MAYAK_VM.Enabled:= false;
Form2.Ne_obrabatyvat.Checked:= true;
end;
try // Ошибка если в Memo1 пробелы
if Stroka.Strings[0] <> '' then // Вставить пустую строку если её нет
Stroka.Insert(0, '');
except
on EStringListError do
end;
Memo1.Text:= Stroka.Text;
stroka.Free;
metka: // если Поле пустое то выход сюда
end;
procedure TForm1.ToolButton6Click(Sender: TObject); // Кнопкаочистить
begin
Memo1.Clear;
Panel1.Caption:= '0';
Panel2.Caption:= '0';
Form2.PC_VM.Enabled:= true;
Form2.PC_MAYAK.Enabled:= true;
Form2.VM_MAYAK.Enabled:= true;
Form2.MAYAK_VM.Enabled:= true;
Label1.Caption:= '';
Form2.FormActivate(Sender);
Memo1.SetFocus;
Indikator.Position:= 0;
end;
procedure TForm1.ToolButton4Click(Sender: TObject); // Кнопкапараметры
begin
Form2.ShowModal;
end;
procedure TForm1.Toolbutton9Click(Sender: TObject); // Кнопканайтиизаменить
begin
ReplaceDialog1.Execute;
end;
procedure TForm1.ReplaceDialog1Replace(Sender: TObject); // Кнопканайтиизаменить
label
10;
begin
Memo1.HideSelection:= true;
10:
if pos(ReplaceDialog1.FindText, Memo1.Text) <> 0 then
begin
Memo1.SelStart:= pos(ReplaceDialog1.FindText, Memo1.Text) - 1 ;
Memo1.SelLength:= Length(ReplaceDialog1.FindText);
Memo1.SelText:= ReplaceDialog1.ReplaceText;
goto 10;
end;
Memo1.HideSelection:= false;
end;
procedure TForm1.memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Panel1.Caption:= IntToStr(Memo1.Lines.Count);
end;
procedure TForm1.ToolButton5Click(Sender: TObject); // Кнопкавверхнийрегистр
begin
Memo1.Text:= UpperCase(Memo1.Text);
end;
procedure TForm1.ToolButton8Click(Sender: TObject);
begin
Form5.Visible:= true;
end;
end.
ФайлUnit2.pas
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm2 = class(TForm)
PereschotProg: TGroupBox;
PC_MAYAK: TRadioButton;
Ne_obrabatyvat: TRadioButton;
PC_VM: TRadioButton;
VM_MAYAK: TRadioButton;
MAYAK_VM: TRadioButton;
Button1: TButton;
Mayk223mp: TRadioButton;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure Sostoyanie_perekluchateley;
begin
if Form2.Ne_obrabatyvat.Checked then
Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.Ne_obrabatyvat.Caption
else
if Form2.PC_MAYAK.Checked then
Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.PC_MAYAK.Caption
else
if Form2.PC_VM.Checked then
Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.PC_VM.Caption
else
if Form2.VM_MAYAK.Checked then
Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.VM_MAYAK.Caption
else
if Form2.MAYAK_VM.Checked then
Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.MAYAK_VM.Caption
else
if Form2.Mayk223mp.Checked then
Form1.PanelSostoyaniya.Panels[0].Text:= st + Form2.Mayk223mp.Caption;
end;
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Sostoyanie_perekluchateley;
If Mayk223mp.Checked then
begin
Form2.Close;
end;
end;
procedure TForm2.FormActivate(Sender: TObject);
begin
Sostoyanie_perekluchateley;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Sostoyanie_perekluchateley;
Form2.Close;
end;
end.
Файл Unit5.pas
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm5 = class(TForm)
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
Edit1: TEdit;
Label1: TLabel;
ButtonObpabotka: TButton;
ButtonNastroyka: TButton;
procedure FormActivate(Sender: TObject);
procedure ButtonObpabotkaClick(Sender: TObject);
procedure ButtonNastroykaClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
uses unit1, unit6;
{$R *.dfm}
procedure TForm5.FormActivate(Sender: TObject);
begin
Form5.Caption:= Application.Title;
end;
procedure TForm5.ButtonObpabotkaClick(Sender: TObject);
var
stroka, stroka1: TStrings;
Name_File, kol_v_stroka: integer;
chast, chot, ObshiySchot: integer;
st, name: WideString;
begin
stroka:= TStringList.Create();
stroka1:= TStringList.Create();
chot:= 0; Name_File:= 1; chast:= 0;
chast:= StrToInt(Edit1.Text) * 955;
kol_v_stroka:= 0;
ObshiySchot:= 0;
stroka1.Text:= Form1.memo1.Text;
repeat
try
st:= stroka1.Strings[ObshiySchot];
except
on EStringListError do
begin
Stroka.Free;
stroka1.Free;
Form1.memo1.Text:= ' Ошибка в редакторе: Возможно в поле редактирования пусто или одни пробелы';
Form5.Close;
Exit;
end;
end;
if chot <= chast then
begin
stroka.Insert(kol_v_stroka, st);
Inc(chot, Length(st)); // Увеличиваем на длину строки
Inc(kol_v_stroka);
Inc(ObshiySchot);
end
else
begin
name:= Concat('E:\Наладчик\Пров\', IntToStr(Name_File), '.txt');
stroka.SaveToFile(name);
stroka.Clear;
chot:= 0;
kol_v_stroka:= 0;
Name_File:= Succ(Name_File);
end;
if (stroka1.Count = ObshiySchot) and (Length(stroka.Text) <> 0) then
begin
name:= Concat('E:\Наладчик\Пров\', IntToStr(Name_File), '.txt');
stroka.SaveToFile(name);
end;
until stroka1.Count = ObshiySchot;
stroka.Free;
stroka1.Free;
Form5.Close;
ShowMessage(' Обработка завершена ');
end;
procedure TForm5.ButtonNastroykaClick(Sender: TObject);
var
NameF: WideString;
begin
Form6.Visible:= true;
end;
end.