📄 lyrcntrl.pas
字号:
// This sample application and corresponding sample code is provided
// for example purposes only. It has not undergone rigorous testing
// and as such should not be shipped as part of a final application
// without extensive testing on the part of the organization releasing
// the end-user product.
unit LyrCntrl;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, MapXLib_TLB;
type
TForm1 = class(TForm)
Command1: TButton;
ListBox1: TListBox;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
GroupBox2: TGroupBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
CheckBox6: TCheckBox;
Label1: TLabel;
Label2: TLabel;
procedure FormActivate(Sender: TObject);
procedure Command1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
procedure CheckBox4Click(Sender: TObject);
procedure CheckBox5Click(Sender: TObject);
procedure CheckBox6Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
lyr: Layer; {Global variable to keep track of selected layer
in listbox}
procedure UpdateControls(layerIsSelected: Boolean; lyt: Layer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
MainUnit;
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
var
i, lyrCount: integer;
begin
listbox1.clear;
{Get count of number of layers in map}
lyrCount := mainunit.mapform.map1.layers.count;
{if at least 1 layer, then add layers to listbox}
if lyrCount > 0 then
Begin
for i := 1 to lyrCount do
listbox1.items.add(mainunit.mapform.map1.layers.item[i].name);
listbox1.itemindex := 0; {set itemindex to first layer}
{set lyr to layer 1}
lyr := mainunit.mapform.map1.layers.item[1];
{Set checkboxes for first layer}
UpdateControls(true, lyr);
end
else
UpdateControls(false, lyr);
end;
procedure TForm1.Command1Click(Sender: TObject);
begin
close; {exit layer control}
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if mainunit.mapform.map1.layers.count > 0 then
lyr.autolabel := checkbox1.checked
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if mainunit.mapform.map1.layers.count > 0 then
lyr.labelproperties.overlap := checkbox2.checked
end;
procedure TForm1.CheckBox3Click(Sender: TObject);
begin
if mainunit.mapform.map1.layers.count > 0 then
lyr.labelproperties.duplicate := checkbox3.checked
end;
procedure TForm1.CheckBox4Click(Sender: TObject);
begin
if mainunit.mapform.map1.layers.count > 0 then
lyr.visible := checkbox4.checked
end;
procedure TForm1.CheckBox5Click(Sender: TObject);
begin
if mainunit.mapform.map1.layers.count > 0 then
lyr.selectable := checkbox5.checked
end;
procedure TForm1.CheckBox6Click(Sender: TObject);
begin
if mainunit.mapform.map1.layers.count > 0 then
lyr.zoomlayer := checkbox6.checked;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
i: integer;
begin
i:=0;
{loop through to get selected layer from listbox}
while not listbox1.selected[i] do i:=i+1;
{set layer to selected layer}
lyr := mainunit.mapform.map1.layers.item[i+1];
{set checkboxes for selected layer}
UpdateControls(true, lyr);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, lyrCount: integer;
begin
lyrCount := mainunit.mapform.map1.layers.count;
if lyrCount > 0 then
Begin
i:=0;
while not listbox1.selected[i] do i:=i+1;
listbox1.clear;
mainunit.mapform.map1.layers.remove(i+1);
lyrCount := lyrCount - 1;
mainunit.mapform.map1.refresh;
if lyrCount = 0 then {reset Checkboxes}
UpdateControls(false, lyr)
else {Add remaining layers to listbox}
Begin
for i := 1 to lyrCount do
listbox1.items.add(mainunit.mapform.map1.layers.item[i].name);
listbox1.itemindex := 0;
lyr := mainunit.mapform.map1.layers.item[1];
UpdateControls(true, lyr);
end;
End
Else
ShowMessage('There are no more layers to remove');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
OpenDialog1.Filter := 'MapInfo Tables(*.TAB)|*.TAB';
OpenDialog1.Title := 'Choose Layer to Open';
OpenDialog1.FileName := '*.TAB';
OpenDialog1.Execute;
If openDialog1.FileName <> '*.TAB' Then
mainunit.mapform.map1.OleObject.layers.add(openDialog1.FileName);
{update ListBox}
listbox1.clear;
for i := 1 to mainunit.mapform.map1.layers.count do
listbox1.items.add(mainunit.mapform.map1.layers.item[i].name);
listbox1.itemindex := 0;
lyr := mainunit.mapform.map1.layers.item[1];
UpdateControls(true, lyr);
end;
procedure TForm1.UpdateControls(layerIsSelected: Boolean; lyt: Layer);
begin
{reset Checkboxes}
if layerIsSelected and (lyr.type_ = miLayerTypeNormal) then
begin
checkbox1.Enabled := true;
checkbox2.Enabled := true;
checkbox3.Enabled := true;
checkbox4.Enabled := true;
checkbox5.Enabled := true;
checkbox6.enabled := true;
label1.enabled := true;
label2.enabled := true;
checkbox1.checked := lyr.autolabel;
checkbox2.checked := lyr.labelproperties.overlap;
checkbox3.checked := lyr.labelproperties.duplicate;
checkbox4.checked := lyr.visible;
checkbox5.checked := lyr.selectable;
checkbox6.checked := lyr.zoomlayer;
label1.caption := 'Min ' + FloatToStrF(lyr.zoommin, ffFixed, 6, 0);
label2.caption := 'Max ' + FloatToStrF(lyr.zoommin, ffFixed, 6, 0);
end
else
begin
checkbox1.Enabled := false;
checkbox2.Enabled := false;
checkbox3.Enabled := false;
checkbox4.Enabled := false;
checkbox5.Enabled := false;
checkbox6.Enabled := false;
label1.Enabled := false;
label2.Enabled := false;
label1.Caption := 'Min';
label2.Caption := 'Max';
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -