?? analysefrm.~pas
字號:
unit AnalyseFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, CheckLst, ExtCtrls, ComCtrls, MapX, MapXLib_TLB;
type
TfrmAnalyse = class(TForm)
Panel1: TPanel;
GroupBox1: TGroupBox;
CheckListBox1: TCheckListBox;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Splitter1: TSplitter;
Splitter2: TSplitter;
Splitter4: TSplitter;
StatusBar1: TStatusBar;
PageControl1: TPageControl;
procedure FormShow(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
procedure PageControl1Change(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
private
{ Private declarations }
FMapX: TMapX;
FAnalyseType: TAnalyseType;
FSourceFs: CMapXFeatures;
FColumnToSort :Integer;
FStatusDrawRect: TRect;
FProgressBar: TProgressBar;
FNewSheet: TTabSheet;
FNewListView: TListView;
FSourceF: CMapXFeature;
procedure CreateNew(Value: string);
procedure SetAnalyseType(const Value: TAnalyseType);
procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
procedure ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure CreateProgressBar(MinValue,MaxValue: Integer);
procedure BeginAnalyse;
procedure FillData(Fs: CMapXFeatures; Lyr: string; ListView1: TListView);
public
{ Public declarations }
procedure SetBuddyMap(AMapX: TMapX);
property AnalyseType: TAnalyseType read FAnalyseType write SetAnalyseType;
property SourceFs: CMapXFeatures read FSourceFs write FSourceFs;
end;
implementation
{$R *.dfm}
procedure TfrmAnalyse.FormShow(Sender: TObject);
var
List: TStringList;
begin
CreateNew('新建');
if Assigned(FMapX)then
begin
List:= TStringList.Create;
FMapX.Get_VisibleLayers(List);
CheckListBox1.Items.Assign(List);
List.Free;
end;
end;
procedure TfrmAnalyse.CreateNew(Value: string);
begin
FNewSheet:= TTabSheet.Create(Self);
FNewSheet.PageControl:= PageControl1;
FNewSheet.Caption:= Value;
FNewListView:= TListView.Create(FNewSheet);
FNewListView.Parent:= FNewSheet;
FNewListView.Align:= alClient;
FNewListView.ViewStyle:= vsReport;
FNewListView.GridLines:= True;
FNewListView.OnColumnClick:= ListView1ColumnClick;
FNewListView.OnCompare:= ListView1Compare;
FNewListView.RowSelect:= True;
end;
procedure TfrmAnalyse.SetAnalyseType(const Value: TAnalyseType);
begin
FAnalyseType := Value;
Edit1.Enabled:= (FAnalyseType = atAlongLine) or (FAnalyseType = atAroundPoint);
CheckListBox1.Enabled:= (FAnalyseType <> atSelected);
if Edit1.Enabled then
begin
Edit1.Text:= '1.0';
Edit1.Color:= clWindow;
end
else
begin
Edit1.Text:= '';
Edit1.Color:= clBtnFace;
end;
case Value of
atSelected : Caption:= Caption+' (選擇結果查看)';
atAlongLine : Caption:= Caption+' (線周邊分析)';
atInRegion : Caption:= Caption+' (區域內分析)';
atAroundPoint: Caption:= Caption+' (點周圍分析)';
end;
end;
procedure TfrmAnalyse.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
FColumnToSort := Column.Index;
(Sender as TCustomListView).AlphaSort;
end;
procedure TfrmAnalyse.ListView1Compare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
Index: Integer;
begin
if FColumnToSort = 0 then
Compare := CompareText(Item1.Caption,Item2.Caption)
else begin
Index := FColumnToSort - 1;
Compare := CompareText(Item1.SubItems[Index],Item2.SubItems[Index]);
end;
end;
procedure TfrmAnalyse.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
FStatusDrawRect:= Rect;
end;
procedure TfrmAnalyse.SpeedButton1Click(Sender: TObject);
var
i: integer;
begin
// 釋放掉以前創建的TabSheet對象,重新分析
if PageControl1.PageCount > 1 then
for i:= PageControl1.PageCount-1 Downto 1 do
PageControl1.Pages[i].Free;
BeginAnalyse;
end;
procedure TfrmAnalyse.FillData(Fs: CMapXFeatures; Lyr: string; ListView1: TListView);
var
MyDataSet: CMapXDataSet;
NewColumn: TListColumn;
NewItem: TListItem;
i,j: integer;
begin
ListView1.Columns.Clear;
ListView1.Clear;
MyDataSet:= FMapX.GetDataSetByName(Lyr);
//創建字段
for i:= 1 to MyDataSet.Fields.Count do
begin
NewColumn:= ListView1.Columns.Add;
NewColumn.Width:=100;
NewColumn.Caption:=MyDataSet.Fields.item[i].Name;
end;
if Fs.Count > 0 then
CreateProgressBar(1,Fs.Count)
else
Exit;
//填入內容
for i:= 1 to Fs.Count do
begin
NewItem:= ListView1.Items.Add;
if MyDataSet._Value[Fs.item[i].FeatureKey,1] <> null then
NewItem.Caption:= MyDataSet.Value[Fs.item[i].FeatureKey,1]
else NewItem.Caption:= ''; {非常有必要把它賦直為空,
否則在排序的時候會因為找不到直而報錯}
if MyDataSet.Fields.Count >= 2 then
for j:= 2 to MyDataSet.Fields.Count do
if MyDataSet._Value[Fs.item[i].FeatureKey,j] <> null then
NewItem.SubItems.Add(MyDataSet._Value[Fs.item[i].FeatureKey,j])
else NewItem.SubItems.Add('');
if Assigned(FProgressBar) then
FProgressBar.Position:= i;
Application.ProcessMessages;
end;
FProgressBar.Free;
end;
procedure TfrmAnalyse.BeginAnalyse;
var
Lyr: string;
i, Num: Integer;
Dis: Double;
begin
if FAnalyseType = atSelected then
begin
Lyr:= FMapX.WorkLayer;
PageControl1.Pages[0].Caption:= Lyr;
FMapX.BindLayerData(Lyr);
StatusBar1.Panels.Items[0].Text:= '正在處理數據...'+'['+Lyr+']';
FillData(FSourceFs, Lyr, TListView(PageControl1.Pages[0].Controls[0]));
end
else
begin
//獲得源對象
if FAnalyseType = atAroundPoint then
FSourceF:= FSourceFs.Item[1]
else
FSourceF:= FMapX.GetCombinedFeature(FSourceFs);
if Edit1.Text = '' then
Dis:= 0
else
Dis:= StrToFloat(Edit1.Text);
Num:= 0;
for i:= 0 to CheckListBox1.Items.Count -1 do
if CheckListBox1.Checked[i] then
begin
Num:= Num+1;
Lyr:= CheckListBox1.Items.Strings[i];
if Num = 1 then
PageControl1.Pages[0].Caption:= Lyr
else
CreateNew(Lyr);
FMapX.BindLayerData(Lyr);
StatusBar1.Panels.Items[0].Text:= ' 正在處理數據...'+'['+Lyr+']';
FillData(FMapX.GetAnalyseResult(FAnalyseType,FSourceF,Lyr,Dis),
Lyr, TListView(PageControl1.Pages[Num-1].Controls[0]));
end; //if
end; //else
//更新信息
PageControl1.OnChange(nil);
end;
procedure TfrmAnalyse.PageControl1Change(Sender: TObject);
begin
StatusBar1.Panels.Items[0].Text:= ' 共有:'+
IntToStr(TListView(PageControl1.ActivePage.Controls[0]).Items.Count)+'個對象';
end;
procedure TfrmAnalyse.SpeedButton2Click(Sender: TObject);
begin
ModalResult:= mrCancel;
end;
procedure TfrmAnalyse.CreateProgressBar(MinValue, MaxValue: Integer);
begin
FProgressBar:= TProgressBar.Create(Self);
StatusBar1.Repaint;
with FProgressBar do
begin
//設定進程條的寬度和高度
Top:= FStatusDrawRect.top;
Left:= FStatusDrawRect.left;
Width:= FStatusDrawRect.right- FStatusDrawRect.left;
Height:= FStatusDrawRect.bottom-FStatusDrawRect.top;
Parent := StatusBar1; //該進程條的擁有者為狀態條status
Max:= MaxValue;
Min:= MinValue;
Visible:=true;
end; //with
end;
procedure TfrmAnalyse.SetBuddyMap(AMapX: TMapX);
begin
if FMapX <> AMapX then
FMapX:= AMapX;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -