⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ezscryacc.pas

📁 很管用的GIS控件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
     FontColor:= Colr;
     FontName:= FVectorFontName;
   end;
   if FGroupInProgress then
      FGroup.Add(Ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_justiftext(const p1,p2:TEzPoint; const Text:String;
  const Height, Angle: Double; Color: TColor; HorzAlign, VertAlign: Byte );
var
   Ent: TEzEntity;
   box: TEzRect;
begin
   if FCheckSyntax then exit;
   box.Emin:=p1;
   box.Emax:=p2;
   box:=ReorderRect2d(box);
   Ent:= TEzJustifVectorText.CreateEntity(box, Height, Text);
   with TEzJustifVectorText(ent) do
   begin
     FontName:= FVectorFontName;
     FontColor:= Color;
     Angle:= DegToRad(Angle);
     HorzAlignment:= TEzHorzAlignment(HorzAlign);
     VertAlignment:= TEzVertAlignment(VertAlign);
   end;
   if FGroupInProgress then
      FGroup.Add(Ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_pictureref(const p1,p2:TEzPoint;
  const filename:String; AlphaChannel: Byte; const Rotangle: Double);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzPictureRef.CreateEntity(p1,p2,FileName);
   TEzPictureRef(ent).Alphachannel:= AlphaChannel;
   TEzPictureRef(ent).Rotangle:= Rotangle;
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_custpict(const p1,p2:TEzPoint);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzCustomPicture.CreateEntity(p1,p2);
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_bandsbitmap(const p1,p2:TEzPoint; const filename:String; AlphaChannel: Byte);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzBandsBitmap.CreateEntity(p1,p2,FileName);
   TEzBandsBitmap(ent).AlphaChannel:=AlphaChannel;
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_persistbitmap(const p1,p2:TEzPoint; const filename:String);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzPersistBitmap.CreateEntity(p1,p2,FileName);
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_insert(const p:TEzPoint; const blockname:String;
  const rotangle,scalex,scaley:Double;const replacer:string);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzBlockInsert.CreateEntity(blockname,p,DegToRad(rotangle),scalex,scaley);
   TEzBlockInsert(ent).Text:=replacer;
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_spline(V:TEzVector);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzSpline.CreateEntity([Point2D(0,0)]);
   ent.points.assign(V);
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_splinetext(IsTrueType: Boolean; const AText: string; V:TEzVector);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzSplineText.CreateEntity(IsTrueType, AText);
   ent.points.assign(V);
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_dimhorizontal(const p1,p2: TEzPoint; const TextLineY: Double);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzDimHorizontal.CreateEntity(p1,p2,TextLineY);
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_dimvertical(const p1,p2: TEzPoint; const TextLineX: Double);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzDimVertical.CreateEntity(p1,p2,TextLineX);
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_dimparallel(const p1,p2: TEzPoint;
  const TextLineDistanceApart: Double);
var
   ent:TEzEntity;
begin
   if FCheckSyntax then exit;
   ent:=TEzDimParallel.CreateEntity(p1,p2,TextLineDistanceApart);
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
end;

procedure TEzScrParser.do_preview(const p1,p2: TEzPoint; FileNo:Integer;
 APlottedUnits, ADrawingUnits: Double; APrintFrame: Boolean;
 AProposedPrintArea: TEzRect );
var
   ent:TEzEntity;
begin
   if FCheckSyntax Or Not(FDrawBox is TEzPreviewBox) then exit;
   ent:=TEzPreviewEntity.CreateEntity(p1,p2,pmAll,FileNo);
   with TEzPreviewEntity(ent) do
   begin
     PlottedUnits:= APlottedUnits;
     DrawingUnits:= ADrawingUnits;
     PrintFrame:= APrintFrame;
     PaperUnits:= TEzPreviewBox( FDrawBox ).PaperUnits;
   end;
   if FGroupInProgress then
      FGroup.Add(ent)
   else
      do_AddEntity(Ent,true);
End;

procedure TEzScrParser.do_table;
begin
   if FCheckSyntax then
   begin
     FTableEntity.Columns.Clear;
     exit;
   end;
   do_addentity( FTableEntity,false );
   FTableEntity.Columns.Clear;
end;

procedure TEzScrParser.do_group;
begin
   if FCheckSyntax then
   begin
     FGroup.Clear;
     exit;
   end;
   do_addentity(FGroup,false);
   FGroup.Clear;
   FGroupInProgress:= False;
end;

procedure TEzScrParser.do_newlayer( const lay:String );
var
  FieldList: TStringList;
  i: Integer;
begin
   if FCheckSyntax then exit;
   with FDrawBox do
   begin
      FieldList:= nil;
      try
        if FNewLayerFields.Count > 0 then
        begin
           FieldList:= TStringList.Create;
           // create a new temp file
           for i:= 0 to FNewLayerFields.Count - 1 do
           begin
              with FNewLayerFields[i] do
                case FieldType of
                  RW_CHAR :
                    FieldList.Add(Format('%s;%s;%d;%d',[FieldName,'C',FieldSize,0]));
                  RW_FLOAT:
                    FieldList.Add(Format('%s;%s;%d;%d',[FieldName,'N',FieldSize,FieldDec]));
                  RW_INTEGER:
                    FieldList.Add(Format('%s;%s;%d;%d',[FieldName,'N',FieldSize,0]));
                  RW_BINARY:
                    FieldList.Add(Format('%s;%s;%d;%d',[FieldName,'B',10,0]));
                  RW_MEMO:
                    FieldList.Add(Format('%s;%s;%d;%d',[FieldName,'M',10,0]));
                  RW_LOGIC:
                    FieldList.Add(Format('%s;%s;%d;%d',[FieldName,'L',1,0]));
                  RW_DATETIME:
                    FieldList.Add(Format('%s;%s;%d;%d',[FieldName,'D',8,0]));
                end;
           end;
        end;
        with GIS do
          layers.CreateNew( lay, FieldList );
      finally
        if FieldList<>nil then FieldList.Free;
      end;
   end;
   FNewLayerFields.Clear;
end;

procedure TEzScrParser.do_activelayer(const lay:String);
begin
   if FCheckSyntax then exit;
   FDrawBox.GIS.CurrentLayerName:=lay;
end;

procedure TEzScrParser.updatefield(const fieldname, fieldvalue:String);
var
  layer: TEzBaseLayer;
begin
  if FCheckSyntax then exit;
  layer := FDrawBox.GIS.CurrentLayer;
  if (layer=nil) or not Assigned(layer.DBTable) then Exit;
  layer.DBTable.Edit;
  layer.DBTable.StringPut(fieldname,fieldvalue);
  layer.DBTable.Post;
end;

{ TNewLayerFields class implementation }
constructor TNewLayerFields.Create;
begin
   inherited Create;
   FItems:= TList.Create;
end;

destructor TNewLayerFields.Destroy;
begin
   Clear;
   FItems.Free;
   inherited Destroy;
end;

function TNewLayerFields.GetCount: Integer;
begin
   Result := FItems.Count;
end;

function TNewLayerFields.GetItem(Index: Integer): TNewLayerField;
begin
   Result := FItems[Index];
end;

function TNewLayerFields.Add: TNewLayerField;
begin
   Result := TNewLayerField.Create;
   FItems.Add(Result);
end;

procedure TNewLayerFields.Clear;
var
   I: Integer;
begin
   for I:= 0 to FItems.Count - 1 do
      TNewLayerField(FItems[I]).Free;
   FItems.Clear;
end;

procedure TNewLayerFields.Delete(Index: Integer);
begin
   TNewLayerField(FItems[Index]).Free;
   FItems.Delete(Index);
end;

// function yylex : Integer; forward;  // addition 1

function TEzScrParser.yyparse : Integer; // addition 2

var yystate, yysp, yyn : SmallInt;
    yys : array [1..yymaxdepth] of SmallInt;
    yyv : array [1..yymaxdepth] of YYSType;
    yyval : YYSType;

    TickStart: DWORD;
    Msg: TMsg;

procedure yyaction ( yyruleno : Integer );
  (* local definitions: *)
  var i: Integer;
      gstyle: TEzTableBorderStyle;
      fnt: TEzFontStyle;
begin
  (* actions: *)
  case yyruleno of
   1 : begin
         yyval := yyv[yysp-0];
       end;
   2 : begin
         yyval := yyv[yysp-1];
       end;
   3 : begin
         yyval := yyv[yysp-0];
       end;
   4 : begin
         yyval := yyv[yysp-0];
       end;
   5 : begin
         yyval := yyv[yysp-0];
       end;
   6 : begin
         yyval := yyv[yysp-0];
       end;
   7 : begin
         yyval := yyv[yysp-0];
       end;
   8 : begin
         yyval := yyv[yysp-0];
       end;
   9 : begin
         yyval := yyv[yysp-0];
       end;
  10 : begin
         yyval := yyv[yysp-0];
       end;
  11 : begin
         yyval := yyv[yysp-0];
       end;
  12 : begin
         yyval := yyv[yysp-0];
       end;
  13 : begin
         if Assigned(FCmdLine) then
         begin
         FCmdLine.AddPointToCurrentAction( Point2D(StrToFloat(yyv[yysp-2].yystring),StrToFloat(yyv[yysp-0].yystring) ) );
         end;
       end;
  14 : begin
         if Assigned(FCmdLine) then
         begin
         FCmdLine.AddRelativePointToCurrentAction(Point2D( StrToFloat(yyv[yysp-2].yystring),StrToFloat(yyv[yysp-0].yystring) ) );
         end;
       end;
  15 : begin
         if Assigned(FCmdLine) then
         begin
         FCmdLine.AddRelativeAngleToCurrentAction( StrToFloat(yyv[yysp-2].yystring),StrToFloat(yyv[yysp-0].yystring) );
         end;
       end;
  16 : begin
         if Assigned(FCmdLine) then
         begin
         FCmdLine.AddPointListToCurrentAction( FVector );
         FVector.Clear;
         end;
       end;
  17 : begin
         if Assigned(FCmdLine) then
         begin
         FCmdLine.CurrentAction.UserValue:= StrToFloat(yyv[yysp-0].yystring);
         FCmdLine.CurrentAction.UserCommand:= itFloatValue;
         end;
       end;
  18 : begin
         if Assigned(FCmdLine) then
         begin
         FCmdLine.CurrentAction.UserString:= GetString( yyv[yysp-0].yystring );
         FCmdLine.CurrentAction.UserCommand:= itString;
         end;
       end;
  19 : begin
         do_penstyle(StrToInt(yyv[yysp-4].yystring), StrToInt(yyv[yysp-2].yystring), StrToFloat(yyv[yysp-0].yystring));
       end;
  20 : begin
         do_fillstyle( StrToInt(yyv[yysp-4].yystring), StrToInt(yyv[yysp-2].yystring), StrToInt(yyv[yysp-0].yystring) ) ;
       end;
  21 : begin
         do_ttfontstyle(GetString( yyv[yysp-12].yystring ), GetBoolean(yyv[yysp-10].yystring),
         GetBoolean(yyv[yysp-8].yystring), GetBoolean(yyv[yysp-6].yystring), GetBoolean(yyv[yysp-4].yystring),
         StrToInt(yyv[yysp-2].yystring), StrToInt(yyv[yysp-0].yystring) );
       end;
  22 : begin
         Ez_Preferences.DefFontStyle.Name:= yyv[yysp-0].yystring;
       end;
  23 : begin
         do_symbolstyle(StrToInt(yyv[yysp-4].yystring), StrToFloat(yyv[yysp-2].yystring), StrToFloat(yyv[yysp-0].yystring));
       end;
  24 : begin
         yyval := yyv[yysp-0];
       end;
  25 : begin
         yyval := yyv[yysp-0];
       end;
  26 : begin
         yyval := yyv[yysp-0];
       end;
  27 : begin
         yyval := yyv[yysp-2];
       end;
  28 : begin
         FVector.AddPoint(StrToFloat(yyv[yysp-3].yystring), StrToFloat(yyv[yysp-1].yystring));
       end;
  29 : begin
         yyval := yyv[yysp-0];
       end;
  30 : begin
         yyval := yyv[yysp-2];
       end;
  31 : begin
         if FVector.Parts.Count=0 then
         FVector.Parts.Add(0);
         FVector.Parts.Add(FVector.Count);
       end;
  32 : begin
         yyval := yyv[yysp-0];
       end;
  33 : begin
         yyval := yyv[yysp-1];
       end;
  34 : begin
         updatefield(yyv[yysp-2].yystring, GetString( yyv[yysp-0].yystring ) );
       end;
  35 : begin
         yyval := yyv[yysp-0];
       end;
  36 : begin
         yyval := yyv[yysp-0];
       end;
  37 : begin
         yyval := yyv[yysp-0];
       end;
  38 : begin
         yyval := yyv[yysp-0];
       end;
  39 : begin
         yyval := yyv[yysp-5];
       end;
  40 : begin
         yyval := yyv[yysp-0];
       end;
  41 : begin
         yyval := yyv[yysp-0];
       end;
  42 : begin
         yyval := yyv[yysp-0];
       end;
  43 : begin
         yyval := yyv[yysp-0];
       end;
  44 : begin
         yyval := yyv[yysp-0];
       end;
  45 : begin
         yyval := yyv[yysp-0];
       end;
  46 : begin
         yyval := yyv[yysp-0];
       end;
  47 : begin
         yyval := yyv[yysp-0];
       end;
  48 : begin
         yyval := yyv[yysp-0];
       end;
  49 : begin
         yyval := yyv[yysp-0];
       end;
  50 : begin
         yyval := yyv[yysp-0];
       end;
  51 : begin
         yyval := yyv[yysp-0];
       end;
  52 : begin
         yyval := yyv[yysp-0];
       end;
  53 : begin
         yyval := yyv[yysp-0];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -