Кстати, это все тоже "загадочное место " где я вынужден два раз вызвать скрипт .
Это то что есть сейчас ...
Условие где ранее заметил глюк выделил цветом ...
Код: Выделить всё
//Реакция на нажатие кнопнок мыши
// на рабочие поле
//.......................................
//.......................................
procedure TRF1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
Ind:Longint;
SCR:String;
label L1;
begin
//ClipArt ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if ( ClipArtNam <>'') then begin
Case Button of
mbRight : if CFA=0 then
begin
InsertClipArt(X,Y);
ClipArtNam := '';
CFa:=1;
PaintBox1Paint(Sender);
end;
mbLeft : if CFA=1 then
begin
SaveBuf;
DrawClipArt(X,Y);
CFa:=0;
end
end;
Exit;
end;
//ClipArt end.
IF CurPT<>Nil Then Begin
Ind:=TPanel(CurPt).HelpContext;// получаем номер инструмента ...
If (Button= mbLeft) or (Button= mbRight) then begin
If Fa=1 then begin Panel1.Enabled:=False; OPStr:='';
end
else Ft:=True;
if DrawList = Nil then DrawList:=TStringList.Create;
///MPS_Create;
///Msg(IntToStr( X ));
With ArTools[Ind] do begin
// Цвета в запись ...
CurC:=Shape1.Brush.Color;
CurB:=Shape2.Brush.Color;
SetParam('ONECLICK','0'); // Флаг "одно-кликовых" иструментов
SetParam('REDRAW','0'); // Полная перерисовка списка фигур
SetParam('FA',IntToStr( FA ) );
SetParam('X',IntToStr( X ) );
SetParam('Y',IntToStr( Y ) );
SetParam('OPSTR',OPStr );
SetParam('CLR',IntToStr(CurC) );
SetParam('BCLR',IntToStr(CurB) );
SetParam('FNT_S',IntToStr(PaintBox1.Font.Size) );
SetParam('FNT_NAME',PaintBox1.Font.Name);
SetParam('FNT_BUI',IntToStr(
Byte( PaintBox1.Font.Bold)*100+
Byte(PaintBox1.Font.Underline)*10
+Byte(PaintBox1.Font.Italic )
));
SetParam('CTXT',edit1.Text);
// SetParam('Color',IntToStr($FF00) );
SCR:=LoadStr(InputSCR);
// Непонятно ! Но почему-то нужно двухкратное выполенеие скриптов ...
PSScript1.Script.Clear; PSScript1.Script.Text:=SCR;
PSScript1.Compile ; PSScript1.Execute ;
PSScript1.Script.Clear; PSScript1.Script.Text:=SCR;
//Компилятция скрипта
If not rf1.PSScript1.Compile then begin
ShowMessage('Синтаксическая ошибка (ввод операции)');
exit;
end else
If not rf1.PSScript1.Execute then begin msg('Ошибка выполнения (ввод операции)');
exit;
end
else begin
OPSTR:=GetParam('OPSTR');
if GetParam('ONECLICK')='1' then GoTo L1 // Жестоко но работет !
end
end;
//MPS_Free;
fa:=0;
end ;
If Button= mbRight then
if FT then
begin
L1: Fa:=1;
Ft:=false;
Panel1.Enabled:=True;
CurCanvas:=Self.PaintBox1.Canvas;
DRW_SETPenColor(CurC);
DRW_SETBrushColor(CurB);
// единственный случай когда
// номер элемета известен
// и нет нужды в поиске по списку
DrawFig(ind,opstr);
DrawList.Add(Opstr);
if GetParam('REDRAW')='1' then PaintBox1Paint(Sender);
if ul<>NIL then ul.Clear;
//MSG(DrawList.text);
Opstr:='';
Listbox1.Clear;
Listbox1.Items.Text:=DrawList.Text;
end
end
end;
(это реальный обработчик нажатия мыши ... да, знаю , код из разряда "диких" и переписывать его буду не один раз ...
но суть не в нем, а в коротеньком условии ... )
If not rf1.PSScript1.Compile then begin
ShowMessage('Синтаксическая ошибка (ввод операции)');
exit;
end else
If not rf1.PSScript1.Execute then begin msg('Ошибка выполнения (ввод операции)');
exit;
end
else begin
OPSTR:=GetParam('OPSTR');
if GetParam('ONECLICK')='1' then GoTo L1 // Жестоко но работет !
end;
А раньше
было Код: Выделить всё
If not rf1.PSScript1.Compile then begin
ShowMessage('Синтаксическая ошибка (ввод операции)');
exit;
end else
If not rf1.PSScript1.Execute then begin msg('Ошибка выполнения (ввод операции)');
exit;
end
else begin
OPSTR:=GetParam('OPSTR');
//-----------------------------!!!!!!!!!!!!!!!-----------------------------------
if GetParam('ONECLICK')='1' then begin
//.....
//.....
end
//-----------------------------!!!!!!!!!!!!!!!-----------------------------------
end;
...
if GetParam('ONECLICK')='1' then begin
//.....
//.....
end
То есть просто добавил еще один "этаж""... и ветка GetParam('ONECLICK')='1' ни разу сработала ...