Смекни!
smekni.com

Конвертирование исходного текста программ для станков с ЧПУ из одной системы программирования в другую (стр. 9 из 14)

procedure memo1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ToolButton5Click(Sender: TObject);

procedure ToolButton8Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

st = ' Параметры: '; // текствстрокесостояния + вмодуле 2

Code_Begin = 100;

var

Form1: TForm1;

Code_My, nach, oshibka, m, uslovie: Integer;

Code_Reg: longint;

proverka_sushesvovania_ini: byte;

reestra, reestrc, reestrb, reestrMy_Code, reestrReg_Code: integer;

reestrversia: string[20];

nach_period, Hac: integer;

Stroka: TStrings;

memo1mod: boolean;

I, J, I_sled, J_sled: real;

X_nast, X_pred, X_sled, Y_nast, Y_pred, Y_sled: real;

Z, A, Uvmmayak, K : real;

implementation

uses Unit2, Unit3, Unit5;

{$R *.dfm}

procedure TForm1.ButPrinterClick(Sender: TObject);

begin

PrinterSetupDialog1.Execute

end;

procedure TForm1.ButPechatClick(Sender: TObject);

begin

PrintDialog1.Execute

end;

procedure TForm1.FondClick(Sender: TObject);

begin

if FontDialog1.Execute then

Memo1.Font:= FontDialog1.Font;

end;

procedure TForm1.PrinteryClick(Sender: TObject);

begin

PrinterSetupDialog1.Execute

end;

procedure TForm1.PechatClick(Sender: TObject);

begin

ToolButton3Click(Sender);

end;

procedure TForm1.ButParametrClick(Sender: TObject);

begin

Form2.ShowModal;

end;

Procedure TForm1.FormResize( Sender: TObject); // Изменениеразмераформы

begin

Memo1.Left:= 10; // Положение слева

Memo1.Top:= 60; // Положение сверху

Memo1.Width:= Form1.ClientWidth-130; // Ширина

Memo1.Height:= Form1.ClientHeight-100; // Высота

NomerKadra.Left:= Form1.ClientWidth-15-NomerKadra.Width;

Probel.Left:= Form1.ClientWidth-15-Probel.Width;

Pustostr.Left:= Form1.ClientWidth-15-Pustostr.Width;

Cancel.Left:= Form1.ClientWidth-20-Cancel.Width;

Obrabotka.Left:= Form1.ClientWidth-20-Obrabotka.Width;

Label2.Left:= Form1.ClientWidth-40-Cancel.Width;

Label3.Left:= Form1.ClientWidth-40-Cancel.Width;

Panel1.Left:= Form1.ClientWidth-18-Panel1.Width;

Panel2.Left:= Form1.ClientWidth-18-Panel2.Width;

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

if Memo1mod then // Если поле Мемо1 изменилось

begin

CanClose:= MessageDlg(' Содержимое редактора изменилось '#10#13' Хотите сохранить данные?', mtConfirmation,[mbYes, mbNo], 0) = mrYes;

if CanClose then ToolButton2Click(Sender);

CanClose:= true;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

const

Reg_Code = 1234567890;

My_Code = 469103;

var

RegIni: TRegistry;

Ini: TIniFile;

data: TDatetime;

begin

DateSeparator:= '.';

DecimalSeparator:= '.';

ShortDateFormat:= 'dd/mm/yyyy';

memo1mod:= false;

reestrMy_Code:= 0;

reestrReg_Code:= 0;

data:= Date; // получаемсегодняшнююдату

nach_period:= Trunc(data);

Ini:= TIniFile.Create('Nal.ini');

proverka_sushesvovania_ini:= Ini.ReadInteger('START', 'CountStart', 0);

if proverka_sushesvovania_ini = 0 then

begin

ini.WriteInteger('START', 'CountStart', 1);

ini.WriteDate('DateBegin', 'DateBegin', data); //вформатедд.мм.гггг

ini.WriteDate('DateEnd', 'DateEnd', data + 30); //вформатедд.мм.гггг

ini.WriteString('Versia', 'Versia', Application.Title);

ini.WriteInteger('CodeBegin', 'CodeBegin', Code_Begin);

ini.WriteInteger('Hac','Hac', nach_period);

end

else

begin

Code_My:= ini.ReadInteger('Code_My', 'Code_My', 0);

Code_Reg:= ini.ReadInteger('Code_Reg', 'Code_Reg', 0);

Hac:= Ini.ReadInteger('Hac','Hac',0);

end;

Ini.Free;

Form1.Caption:= Application.Title;

Form1.memo1.Clear;

Form1.PanelSostoyaniya.Panels[0].Text:= st + ' Необрабатывать ';

Form1.Panel1.Caption:= '0';

Form1.Panel2.Caption:= '0';

RegIni:= TRegistry.Create;

RegIni.RootKey:= HKEY_LOCAL_MACHINE;

RegIni.OpenKey('Software\Naladchik', true);

if not RegIni.KeyExists('a') then // Если нет этого ключа то прописываем.

begin

RegIni.CreateKey('a');

RegIni.WriteInteger('a', 100);

RegIni.WriteString('Versia', Application.Title);

RegIni.WriteInteger('b', nach_period); // вформате 00000

RegIni.WriteInteger('c', nach_period + 30); // вформате 00000

RegIni.CloseKey;

RegIni.Free;

end;

RegIni:= TRegistry.Create;

RegIni.RootKey:= HKEY_LOCAL_MACHINE;

RegIni.OpenKey('Software\Naladchik', false);

reestra:= RegIni.ReadInteger('a');

reestrversia:= RegIni.ReadString('Versia');

reestrb:= RegIni.ReadInteger('b');

reestrc:= RegIni.ReadInteger('c');

if proverka_sushesvovania_ini = 2 then

begin

reestrMy_Code:= RegIni.ReadInteger('d');

reestrReg_Code:= RegIni.ReadInteger('e');

end;

RegIni.CloseKey;

RegIni.Free;

if Hac > nach_period then nach_period:= Hac // защитаотпереводадаты

else Hac:= nach_period;

Ini:= TIniFile.Create('Nal.ini');

ini.WriteInteger('Hac', 'Hac', Hac);

ini.Free;

// Code_My и Code_Reg из ini файла

if (Code_My = My_Code) and (Code_Reg = Reg_Code) and (reestrMy_Code = My_Code) and (reestrReg_Code = Reg_Code)

then Form1.Caption:= Application.Title + '(Зарегистрированнаяверсия)'

else

begin

if reestrc > nach_period then

Form1.Caption:= Application.Title + ' (Осталось '+IntToStr(reestrc - nach_period)+' дней)';

if reestrc <= nach_period then

begin

ShowMessage('Демонстрационный период закончен' + #13 + 'За регистрацией обратитесь к разработчику'+#13'dimasoft1@mail.ru');

Halt(1);

end;

end;

end;

procedure TForm1.ToolButton1Click(Sender: TObject);

var

kol: integer;

begin

Indikator.Position:= 0;

Form1.PanelSostoyaniya.Panels[1].Text:= '';

Memo1.Clear;

if OpenDialog1.Execute then

begin

Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

label1.Caption:= OpenDialog1.FileName;

kol:= Memo1.Lines.Count;

Panel2.Caption:= '0';

Panel1.Caption:= IntToStr(kol - 1);

end;

Form2.PC_VM.Enabled:= true;

Form2.PC_MAYAK.Enabled:= true;

Form2.VM_MAYAK.Enabled:= true;

Form2.MAYAK_VM.Enabled:= true;

Form2.FormActivate(Sender);

end;

procedure TForm1.ParametryClick(Sender: TObject);

begin

Form2.ShowModal;

end;

procedure TForm1.ToolButton2Click(Sender: TObject);

begin

if SaveDialog1.Execute then

begin

Memo1.Lines.SaveToFile(SaveDialog1.FileName);

Memo1.Modified:= false;

end;

end;

procedure TForm1.ToolButton3Click(Sender: TObject); // Печать

var

line: System.TextFile;

i: integer;

begin

if PrintDialog1.Execute then

begin

AssignPrn(line);

rewrite(line);

Printer.Canvas.Font:= Memo1.Font;

for i:= 0 to memo1.Lines.Count-1 do writeln(line,' ', Memo1.Lines[i]);

System.CloseFile(line);

end;

end;

procedure TForm1.VersiaClick(Sender: TObject);

begin

AboutBox.ShowModal;

end;

procedure TForm1.VyhodClick(Sender: TObject);

begin

Form1.Close;

end;

procedure TForm1.SaveClick(Sender: TObject);

begin

ToolButton2Click(Sender);

end;

procedure TForm1.OpenClick(Sender: TObject);

begin

ToolButton1Click(Sender);

end;

procedure TForm1.PrintClick(Sender: TObject);

begin

ToolButton3Click(Sender);

end;

procedure TForm1.CancelClick(Sender: TObject);

begin

Form1.Close;

end;

procedure NaytiKoordinatu(kadr: string; koordinata: char; var poluchenaya: string);

var

p : integer;

poz_10: string[100];

per : string[10];

r: real;

begin

per:=' ';

kadr:= Concat(kadr, ' ');

nach:= pos(koordinata,kadr);

nach:= Succ(nach);

poz_10:= copy(kadr, nach, 100);

val(poz_10,r,oshibka);

for p:=1 to oshibka - 1 do

per[p]:= poz_10[p];

if poz_10 = ' ' then oshibka:= 1;

poluchenaya:= TrimRight(per);

end;

function DobavitTochku( f: string): string; // Добавляетточку, еслиеёнет

begin

if pos('.', f) = 0

then f:= Concat(f, '.');

Result:= f;

end;

procedure Podhod_G41_G42_radius;

begin // Х и Y уже найдены

if pos('G3', Stroka.Strings[Succ(m)]) <> 0 then

begin

if (I > 0) and (J >= 0) then

begin

I_sled:= 1;

J_sled:= -1;

exit;

end;

if (I < 0) and (J <= 0) then

begin

I_sled:= -1;

J_sled:= 1;

exit;

end;

if (I <= 0) and (J > 0) then

begin

I_sled:= 1;

J_sled:= 1;

exit;

end;

if (I >= 0) and (J < 0) then

begin

I_sled:= -1;

J_sled:= -1;

exit;

end;

end;

if pos('G2', Stroka.Strings[Succ(m)]) <> 0 then

begin

if (I >= 0) and (J > 0) then

begin

I_sled:= -1;

J_sled:= 1;

exit;

end;

if (I <= 0) and (J < 0) then

begin

I_sled:= 1;

J_sled:= -1;

exit;

end;

if (I < 0) and (J >= 0) then

begin

I_sled:= -1;

J_sled:= -1;

exit;

end;

if (I > 0) and (J <= 0) then

begin

I_sled:= 1;

J_sled:= 1;

exit;

end;

end;

end;

// Преобразует строку, удаляет и вставляет подстроку ВМ

function preobrazovanieVM( vhod_v_preobrazovanie: real ;var kadr: string): string;

var

stroka: string[10];

begin

delete(kadr,nach,oshibka-1);

stroka:= FloatToStr(vhod_v_preobrazovanie); // Преобразуемвчислостроку

insert(stroka, kadr, nach);

end;

// Преобразует строку, удаляет и вставляет подстроку МАЯК

function preobrazovanieMAYAK( vhod_v_preobrazovanie: real ;var kadr: string): string;

var

stroka: string[10];

begin

delete(kadr,nach,oshibka-1);

if vhod_v_preobrazovanie <> 0 then

begin

stroka:= FloatToStrF(vhod_v_preobrazovanie, fffixed, 12, 3); // Преобразуемвчислостроку

vhod_v_preobrazovanie:= StrToFloat(stroka); // Былглюкприконвертации

stroka:= FloatToStr(vhod_v_preobrazovanie); // Сейчасвродеработает

stroka:= DobavitTochku(stroka); // Добавляетточку, еслиеёнет

end

else stroka:= '0'; // вставляембезточки

insert(stroka, kadr, nach);

end;

procedure Podhod_G41_G42_line;

var

str: String;

begin

str:= stroka.Strings[Succ(m)];

if Pos('X', str) <> 0 then

begin

NaytiKoordinatu(str, 'X', str);

X_sled:= StrToFloat(str);

end

else

begin

if (Form2.PC_VM.Checked) or (Form2.MAYAK_VM.Checked) then

X_sled:= X_nast / 1000

else

X_sled:= X_nast;

end;

str:= stroka.Strings[Succ(m)];

if Pos('Y', str) <> 0 then

begin

NaytiKoordinatu(str, 'Y', str);

Y_sled:= StrToFloat(str);

end

else

begin

if (Form2.PC_VM.Checked) or (Form2.MAYAK_VM.Checked) then

Y_sled:= Y_pred / 1000

else

Y_sled:= Y_nast;

end;

if (Form2.PC_VM.Checked) or (Form2.MAYAK_VM.Checked) then

begin

X_sled:= X_sled * 1000;

Y_sled:= Y_sled * 1000;

X_sled:= X_sled - X_nast;

Y_sled:= Y_sled - Y_nast;

end

else

begin

X_sled:= X_sled - X_nast;

Y_sled:= Y_sled - Y_nast;

end;

end;

function FindVstavki(koordinata: char; kadr: string): integer;

begin

case koordinata of

'X': begin

if pos('Y', kadr) <> 0 then Result:= pos('Y', kadr)

else if pos('I', kadr) <> 0 then Result:= pos('I', kadr)

else if pos('J', kadr) <> 0 then Result:= pos('J', kadr)

else if pos('F', kadr) <> 0 then Result:= pos('F', kadr)

else if pos('M', kadr) <> 0 then Result:= pos('M', kadr)

else Result:= Length(kadr) + 1;

end;

'Y': begin

if pos('I', kadr) <> 0 then Result:= pos('I', kadr)

else if pos('J', kadr) <> 0 then Result:= pos('J', kadr)

else if pos('F', kadr) <> 0 then Result:= pos('F', kadr)

else if pos('M', kadr) <> 0 then Result:= pos('M', kadr)

else Result:= Length(kadr) + 1;

end;

'I': begin

if pos('J', kadr) <> 0 then Result:= pos('J', kadr)

else if pos('F', kadr) <> 0 then Result:= pos('F', kadr)

else if pos('M', kadr) <> 0 then Result:= pos('M', kadr)

else Result:= Length(kadr) + 1;

end;

'J': begin

if pos('F', kadr) <> 0 then Result:= pos('F', kadr)

else if pos('M', kadr) <> 0 then Result:= pos('M', kadr)

else Result:= Length(kadr) + 1;

end;

else

Result:= Length(kadr) + 1;

end;

end;

procedure TForm1.ObrabotkaClick(Sender: TObject);

label

metka;

var

kol, buf: integer;

Proc, proci, u: integer;

vyh: string;

PolChisla_1Proc, uvel: real;

bufer: string;

Priz_pusto_memo: boolean;

procedure DelProbel(var kadr: string); // Удалениепробелов

var

k: integer;

begin

while pos(' ', kadr) <> 0 do

begin

k:= pos(' ', kadr);

delete(kadr, k, 1);

end;

end;

procedure pustostroka;

begin

stroka.Delete(m); // Удаляемпустуюстроку

Dec(kol); // Уменьшаем кол-во строк на 1

Dec(m); // Уменьшаем на одну стороку

end;

procedure nomerkadra(var kadr: string);

var

error, nach, x: integer;

poz_N7: string [10];

begin

poz_N7:= ' ';

nach:= pos('N',kadr); // Номерпозиции 'N'

if nach <> 0 then // Позициянайдена

begin

Inc(nach); // Наращиваемна 1

poz_N7:= copy(kadr, nach, 10);

val(poz_N7,x,error); // проверяем на ошибку

if error = 1 then

else

begin

delete(kadr,nach,error-1); // Удаляемстароезначение

Inc(buf); // Наращиваем кадр на 1

insert(IntToStr(buf), kadr, nach); // Вставляем новое число

end;

end;

end;

Procedure PC_MAYAK(var kadr: string);

var

I_est: boolean;

st: string;

s: string[10];

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

begin

X_nast:= StrToFloat(vyh);

PreobrazovanieMayak(X_nast, kadr); // небылоточки

end;

end

else

if I_est then // ДобавлениеХЕслинет

begin

uslovie:= FindVstavki('X', kadr);