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

📄 unit1.pas

📁 MapObject中ValueMapRenderer使用的实例
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, OleCtrls, MapObjects2_TLB, ExtCtrls, ColorGrd;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Map1: TMap;
    cbbLayers: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    cbbFields: TComboBox;
    Label3: TLabel;
    cbbValues: TComboBox;
    ColorGrid1: TColorGrid;
    procedure FormActivate(Sender: TObject);
    procedure cbbLayersChange(Sender: TObject);
    procedure cbbFieldsChange(Sender: TObject);
    procedure cbbValuesChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);
var
  CurrentLayer: imoMapLayer;
  i: integer;
begin
  CurrentLayer := coMapLayer.Create ;

  for i := 0 to Map1.Layers.Count - 1 do
  begin
    CurrentLayer := ImoMapLayer(Map1.Layers.Item(i));
    cbbLayers.Items.Add(CurrentLayer.Name);
  end;

  cbbLayers.ItemIndex := 0;

  cbbLayers.OnChange(Sender);
end;

//提取字段名称
procedure TForm1.cbbLayersChange(Sender: TObject);
var
  CurrentLayer: imoMapLayer;
  i: integer;
  MyTableDesc: imoTableDesc;
begin
  CurrentLayer := coMapLayer.Create ;
  MyTableDesc := coTableDesc.Create ;

  CurrentLayer := ImoMapLayer(Map1.Layers.Item(cbbLayers.Text));

  MyTableDesc := CurrentLayer.Records.TableDesc ;

  cbbFields.Clear ;
  for i := 0 to MyTableDesc.FieldCount - 1 do
  begin
    cbbFields.Items.Add(MyTableDesc.FieldName[i]);
  end;
  cbbFields.ItemIndex := 0;

end;

procedure TForm1.cbbFieldsChange(Sender: TObject);
var
  MyStrings: imoStrings;
  MyRecordSet: imoRecordSet;
  CurrentLayer: imoMapLayer;
  MyRenderer: imoValueMapRenderer; //为可创建对象
  i: integer;
begin
  MyStrings := coStrings.Create ;
  CurrentLayer := coMapLayer.Create ;
  MyRenderer := coValueMapRenderer.Create ;

  CurrentLayer := ImoMapLayer(Map1.Layers.Item(cbbLayers.Text));

  MyRecordSet := CurrentLayer.Records ;
  //遍历数据 ,提取用户所选择的字段包含的值。
  while not MyRecordSet.EOF do
  begin
    MyStrings.Add(MyRecordSet.Fields.Item(cbbFields.Text).ValueAsString);
    MyRecordSet.MoveNext ;
  end;

  //设定MyRenderer属性
  MyRenderer.Field := cbbFields.Text ;
  MyRenderer.ValueCount := MyStrings.Count ;

  for i := 0 to MyStrings.Count - 1 do
  begin
    MyRenderer.Value[i] := MyStrings.Item(i);
    cbbValues.Items.Add(MyStrings.Item(i));
  end;

  CurrentLayer.Renderer := MyRenderer;
  Map1.Refresh ;

end;

procedure TForm1.cbbValuesChange(Sender: TObject);
var
  MyRenderer: imoValueMapRenderer;
  CurrentLayer: imoMapLayer;
begin
  MyRenderer := coValueMapRenderer.Create ;
  CurrentLayer := coMapLayer.Create ;

  CurrentLayer := imoMapLayer(Map1.Layers.Item(cbbLayers.Text));

  MyRenderer := ImoValueMapRenderer(CurrentLayer.Renderer);

  MyRenderer.Symbol[cbbValues.ItemIndex].Color := ColorGrid1.ForegroundColor ;

  Map1.Refresh ; 
end;

end.

⌨️ 快捷键说明

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