- Fixed memory leak in TfrmFilter (not freeing FCheckedHues)
- Fixed memory leak in TfrmMain (not freeing the strings in the location info nodes) - Rearranged frmEditAccount to allow region handling - Added region handling to the client side account specific network packets - Fixed some more code style inconsistencies in UfrmRegionControl.pas - Fixed redrawing in TfrmRegionControl - Fixed memory leak in TAccount (not freeing FRegions) - Fixed the TModifyRegionResponsePacket ID - Fixed the content of the TUserListPacket to not contain the list of all regions
This commit is contained in:
@@ -32,8 +32,7 @@ interface
|
||||
uses
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, CheckLst,
|
||||
VirtualTrees, ExtCtrls, ImagingComponents, StdCtrls, Buttons, Spin, LCLIntf,
|
||||
math, UPlatformTypes, UEnhancedMemoryStream, Menus,contnrs, UInterfaces,
|
||||
URectList;
|
||||
math, UPlatformTypes, UEnhancedMemoryStream, Menus, contnrs, URectList;
|
||||
|
||||
type
|
||||
TAreaMoveType = (amLeft, amTop, amRight, amBottom);
|
||||
@@ -50,20 +49,20 @@ type
|
||||
Label1: TLabel;
|
||||
lblX: TLabel;
|
||||
lblY: TLabel;
|
||||
mnuAddGroup: TMenuItem;
|
||||
mnuRemoveGroup: TMenuItem;
|
||||
mnuAddRegion: TMenuItem;
|
||||
mnuRemoveRegion: TMenuItem;
|
||||
Panel1: TPanel;
|
||||
Panel2: TPanel;
|
||||
Panel3: TPanel;
|
||||
pbArea: TPaintBox;
|
||||
pnlAreaControls: TPanel;
|
||||
pmGroup: TPopupMenu;
|
||||
pmRegions: TPopupMenu;
|
||||
sbArea: TScrollBox;
|
||||
seX1: TSpinEdit;
|
||||
seX2: TSpinEdit;
|
||||
seY1: TSpinEdit;
|
||||
seY2: TSpinEdit;
|
||||
vstGroups: TVirtualStringTree;
|
||||
vstRegions: TVirtualStringTree;
|
||||
vstArea: TVirtualStringTree;
|
||||
procedure acAddGroup(Sender: TObject);
|
||||
procedure accRemoveGroup(Sender: TObject);
|
||||
@@ -84,12 +83,13 @@ type
|
||||
procedure vstAreaChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||||
procedure vstAreaGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
|
||||
procedure vstGroupsChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||||
procedure vstGroupsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
procedure vstRegionsChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||||
procedure vstRegionsFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||||
procedure vstRegionsGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
|
||||
procedure vstGroupsNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
procedure vstRegionsNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
Column: TColumnIndex; const NewText: WideString);
|
||||
procedure vstGroupsOnEditing(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
procedure vstRegionsOnEditing(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||||
Column: TColumnIndex; var Allowed: Boolean);
|
||||
protected
|
||||
FLastX: Integer;
|
||||
@@ -142,13 +142,13 @@ var
|
||||
node: PVirtualNode;
|
||||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
vstGroups.BeginUpdate;
|
||||
vstGroups.Clear;
|
||||
vstRegions.BeginUpdate;
|
||||
vstRegions.Clear;
|
||||
regionCount := ABuffer.ReadByte;
|
||||
for i := 0 to regionCount - 1 do
|
||||
begin
|
||||
node := vstGroups.AddChild(nil);
|
||||
regionInfo := vstGroups.GetNodeData(node);
|
||||
node := vstRegions.AddChild(nil);
|
||||
regionInfo := vstRegions.GetNodeData(node);
|
||||
regionInfo^.Name := ABuffer.ReadStringNull;
|
||||
regionInfo^.Areas := TRectList.Create;
|
||||
areaCount := ABuffer.ReadByte;
|
||||
@@ -161,7 +161,7 @@ begin
|
||||
regionInfo^.Areas.Add(x1, y1, x2, y2);
|
||||
end;
|
||||
end;
|
||||
vstGroups.EndUpdate;
|
||||
vstRegions.EndUpdate;
|
||||
end;
|
||||
|
||||
|
||||
@@ -175,11 +175,11 @@ begin
|
||||
seY2.MaxValue := ResMan.Landscape.CellHeight;
|
||||
|
||||
vstArea.NodeDataSize := SizeOf(TRect);
|
||||
vstGroups.NodeDataSize := SizeOf(TRegionInfo);
|
||||
vstRegions.NodeDataSize := SizeOf(TRegionInfo);
|
||||
|
||||
frmRadarMap.Dependencies.Add(pbArea);
|
||||
|
||||
AdminPacketHandlers[$09] := TPacketHandler.Create(0, @OnListRegionsPacket);
|
||||
AdminPacketHandlers[$0A] := TPacketHandler.Create(0, @OnListRegionsPacket);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.btnDeleteAreaClick(Sender: TObject);
|
||||
@@ -187,11 +187,11 @@ var
|
||||
infoGroup: PRegionInfo;
|
||||
i: Integer;
|
||||
begin
|
||||
if vstGroups.GetFirstSelected <> nil then
|
||||
if vstRegions.GetFirstSelected <> nil then
|
||||
begin
|
||||
infoGroup := vstGroups.GetNodeData(vstGroups.GetFirstSelected);
|
||||
infoGroup := vstRegions.GetNodeData(vstRegions.GetFirstSelected);
|
||||
infoGroup^.Areas.Delete(vstArea.AbsoluteIndex(vstArea.GetFirstSelected));
|
||||
vstGroupsChange(vstGroups, vstGroups.GetFirstSelected);
|
||||
vstRegionsChange(vstRegions, vstRegions.GetFirstSelected);
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -209,15 +209,15 @@ begin
|
||||
stream.Position := stream.Size;
|
||||
stream.WriteByte($09);
|
||||
|
||||
groupCount := Min(vstGroups.RootNodeCount, 255);
|
||||
groupCount := Min(vstRegions.RootNodeCount, 255);
|
||||
stream.WriteByte(groupCount);
|
||||
if groupCount = 0 then Exit;
|
||||
|
||||
i := 0;
|
||||
node := vstGroups.GetFirst;
|
||||
node := vstRegions.GetFirst;
|
||||
while (node <> nil) and (i < groupCount) do
|
||||
begin
|
||||
groupInfo := vstGroups.GetNodeData(node);
|
||||
groupInfo := vstRegions.GetNodeData(node);
|
||||
stream.WriteStringNull(groupInfo^.Name);
|
||||
areaCount:=Min(groupInfo^.Areas.Count,255);
|
||||
stream.WriteByte(areaCount);
|
||||
@@ -229,7 +229,7 @@ begin
|
||||
stream.WriteWord(Max(Left, Right));
|
||||
stream.WriteWord(Max(Top, Bottom));
|
||||
end;
|
||||
node := vstGroups.GetNext(node);
|
||||
node := vstRegions.GetNext(node);
|
||||
Inc(i);
|
||||
end;
|
||||
dmNetwork.Send(TCompressedPacket.Create(packet));
|
||||
@@ -241,48 +241,53 @@ var
|
||||
node : PVirtualNode;
|
||||
infoGroup : PRegionInfo;
|
||||
begin
|
||||
node := vstGroups.AddChild(nil);
|
||||
infoGroup := vstGroups.GetNodeData(node);
|
||||
node := vstRegions.AddChild(nil);
|
||||
infoGroup := vstRegions.GetNodeData(node);
|
||||
infoGroup^.Name := 'Unnamed';
|
||||
infoGroup^.Areas := TRectList.Create;
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.accRemoveGroup(Sender: TObject);
|
||||
begin
|
||||
vstGroups.DeleteSelectedNodes;
|
||||
vstGroupsChange(vstGroups, nil);
|
||||
vstRegions.DeleteSelectedNodes;
|
||||
vstRegionsChange(vstRegions, nil);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.btnAddAreaClick(Sender: TObject);
|
||||
var
|
||||
node: PVirtualNode;
|
||||
nodeInfo: ^TRect;
|
||||
infoGroup : PRegionInfo;
|
||||
node, selected: PVirtualNode;
|
||||
areaInfo: ^TRect;
|
||||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
infoGroup:=vstGroups.GetNodeData(vstGroups.GetFirstSelected);
|
||||
node := vstArea.AddChild(nil);
|
||||
nodeInfo := vstArea.GetNodeData(node);
|
||||
nodeInfo^.Left := 0;
|
||||
nodeInfo^.Top := 0;
|
||||
nodeInfo^.Right := 0;
|
||||
nodeInfo^.Bottom := 0;
|
||||
infoGroup^.Areas.Add(0, 0, 0, 0);
|
||||
vstArea.ClearSelection;
|
||||
vstArea.Selected[node] := True;
|
||||
vstArea.FocusedNode := node;
|
||||
selected := vstRegions.GetFirstSelected;
|
||||
if selected <> nil then
|
||||
begin
|
||||
regionInfo := vstRegions.GetNodeData(selected);
|
||||
node := vstArea.AddChild(nil);
|
||||
areaInfo := vstArea.GetNodeData(node);
|
||||
areaInfo^.Left := 0;
|
||||
areaInfo^.Top := 0;
|
||||
areaInfo^.Right := 0;
|
||||
areaInfo^.Bottom := 0;
|
||||
regionInfo^.Areas.Add(0, 0, 0, 0);
|
||||
vstArea.ClearSelection;
|
||||
vstArea.Selected[node] := True;
|
||||
vstArea.FocusedNode := node;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.btnClearAreaClick(Sender: TObject);
|
||||
var
|
||||
infoGroup: PRegionInfo;
|
||||
infoArea : TRect;
|
||||
regionNode: PVirtualNode;
|
||||
regionInfo: PRegionInfo;
|
||||
i: Integer;
|
||||
begin
|
||||
if vstGroups.GetFirstSelected <> nil then
|
||||
regionNode := vstRegions.GetFirstSelected;
|
||||
if regionNode <> nil then
|
||||
begin
|
||||
infoGroup := vstGroups.GetNodeData(vstGroups.GetFirstSelected);
|
||||
infoGroup^.Areas.Clear;
|
||||
vstGroupsChange(vstGroups, vstGroups.GetFirstSelected);
|
||||
regionInfo := vstRegions.GetNodeData(regionNode);
|
||||
regionInfo^.Areas.Clear;
|
||||
vstRegionsChange(vstRegions, vstRegions.GetFirstSelected);
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -294,7 +299,7 @@ end;
|
||||
procedure TfrmRegionControl.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
frmRadarMap.Dependencies.Remove(pbArea);
|
||||
if AdminPacketHandlers[$09] <> nil then FreeAndNil(AdminPacketHandlers[$09]);
|
||||
if AdminPacketHandlers[$0A] <> nil then FreeAndNil(AdminPacketHandlers[$0A]);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.FormShow(Sender: TObject);
|
||||
@@ -306,50 +311,50 @@ end;
|
||||
procedure TfrmRegionControl.pbAreaMouseDown(Sender: TObject;
|
||||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||||
var
|
||||
node, match: PVirtualNode;
|
||||
nodeInfo: ^TRect;
|
||||
areaNode, regionNode, match: PVirtualNode;
|
||||
areaInfo: ^TRect;
|
||||
p: TPoint;
|
||||
i: Integer;
|
||||
infoArea: TRect;
|
||||
infoGroup: PRegionInfo;
|
||||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
FAreaMove := [];
|
||||
p := Point(X * 8, Y * 8);
|
||||
match := nil;
|
||||
node := vstArea.GetFirst;
|
||||
while node <> nil do
|
||||
areaNode := vstArea.GetFirst;
|
||||
while areaNode <> nil do //find the last matching area
|
||||
begin
|
||||
nodeInfo := vstArea.GetNodeData(node);
|
||||
if PtInRect(nodeInfo^, p) then
|
||||
match := node;
|
||||
node := vstArea.GetNext(node);
|
||||
areaInfo := vstArea.GetNodeData(areaNode);
|
||||
if PtInRect(areaInfo^, p) then
|
||||
match := areaNode;
|
||||
areaNode := vstArea.GetNext(areaNode);
|
||||
end;
|
||||
if match <> nil then
|
||||
begin
|
||||
nodeInfo := vstArea.GetNodeData(match);
|
||||
if p.x - nodeInfo^.Left <= 64 then Include(FAreaMove, amLeft);
|
||||
if p.y - nodeInfo^.Top <= 64 then Include(FAreaMove, amTop);
|
||||
if nodeInfo^.Right - p.x <= 64 then Include(FAreaMove, amRight);
|
||||
if nodeInfo^.Bottom - p.y <= 64 then Include(FAreaMove, amBottom);
|
||||
areaInfo := vstArea.GetNodeData(match);
|
||||
if p.x - areaInfo^.Left <= 64 then Include(FAreaMove, amLeft);
|
||||
if p.y - areaInfo^.Top <= 64 then Include(FAreaMove, amTop);
|
||||
if areaInfo^.Right - p.x <= 64 then Include(FAreaMove, amRight);
|
||||
if areaInfo^.Bottom - p.y <= 64 then Include(FAreaMove, amBottom);
|
||||
if FAreaMove = [] then
|
||||
FAreaMove := [amLeft, amTop, amRight, amBottom];
|
||||
end else
|
||||
begin
|
||||
if vstGroups.GetFirstSelected <> nil then
|
||||
begin
|
||||
infoGroup:=vstGroups.GetNodeData(vstGroups.GetFirstSelected);
|
||||
match := vstArea.AddChild(nil);
|
||||
nodeInfo:=vstArea.GetNodeData(match);
|
||||
nodeInfo^.Left := p.x;
|
||||
nodeInfo^.Top := p.y;
|
||||
nodeInfo^.Right := p.x;
|
||||
nodeInfo^.Bottom := p.y;
|
||||
infoGroup^.Areas.Add(p.x, p.y, p.x, p.y);
|
||||
regionNode := vstRegions.GetFirstSelected;
|
||||
if regionNode <> nil then
|
||||
begin
|
||||
regionInfo := vstRegions.GetNodeData(regionNode);
|
||||
match := vstArea.AddChild(nil);
|
||||
areaInfo := vstArea.GetNodeData(match);
|
||||
areaInfo^.Left := p.x;
|
||||
areaInfo^.Top := p.y;
|
||||
areaInfo^.Right := p.x;
|
||||
areaInfo^.Bottom := p.y;
|
||||
regionInfo^.Areas.Add(p.x, p.y, p.x, p.y);
|
||||
|
||||
pbArea.Repaint;
|
||||
pbArea.Repaint;
|
||||
|
||||
FAreaMove := [amRight, amBottom];
|
||||
end;
|
||||
FAreaMove := [amRight, amBottom];
|
||||
end;
|
||||
end;
|
||||
vstArea.ClearSelection;
|
||||
vstArea.Selected[match] := True;
|
||||
@@ -380,7 +385,7 @@ procedure TfrmRegionControl.pbAreaPaint(Sender: TObject);
|
||||
var
|
||||
i: Integer;
|
||||
node: PVirtualNode;
|
||||
nodeInfo: ^TRect;
|
||||
areaInfo: ^TRect;
|
||||
begin
|
||||
DisplayImage(pbArea.Canvas, 0, 0, frmRadarMap.Radar);
|
||||
pbArea.Canvas.Pen.Color := clRed;
|
||||
@@ -398,9 +403,9 @@ begin
|
||||
pbArea.Canvas.Pen.Width := 1;
|
||||
pbArea.Canvas.Pen.Style := psDot;
|
||||
end;
|
||||
nodeInfo := vstArea.GetNodeData(node);
|
||||
pbArea.Canvas.Rectangle(nodeInfo^.Left div 8, nodeInfo^.Top div 8,
|
||||
nodeInfo^.Right div 8 + 1, nodeInfo^.Bottom div 8 + 1);
|
||||
areaInfo := vstArea.GetNodeData(node);
|
||||
pbArea.Canvas.Rectangle(areaInfo^.Left div 8, areaInfo^.Top div 8,
|
||||
areaInfo^.Right div 8 + 1, areaInfo^.Bottom div 8 + 1);
|
||||
node := vstArea.GetNext(node);
|
||||
end;
|
||||
end;
|
||||
@@ -408,19 +413,19 @@ end;
|
||||
procedure TfrmRegionControl.seX1Change(Sender: TObject);
|
||||
var
|
||||
node: PVirtualNode;
|
||||
nodeInfo: ^TRect;
|
||||
infoGroup: PRegionInfo;
|
||||
areaInfo: ^TRect;
|
||||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
node := vstArea.GetFirstSelected;
|
||||
if node <> nil then
|
||||
begin
|
||||
nodeInfo := vstArea.GetNodeData(node);
|
||||
nodeInfo^.Left := seX1.Value;
|
||||
nodeInfo^.Right := seX2.Value;
|
||||
nodeInfo^.Top := seY1.Value;
|
||||
nodeInfo^.Bottom := seY2.Value;
|
||||
infoGroup:= vstGroups.GetNodeData(vstGroups.GetFirstSelected);
|
||||
infoGroup^.Areas.Rects[vstArea.AbsoluteIndex(node)] := nodeinfo^;
|
||||
areaInfo := vstArea.GetNodeData(node);
|
||||
areaInfo^.Left := seX1.Value;
|
||||
areaInfo^.Right := seX2.Value;
|
||||
areaInfo^.Top := seY1.Value;
|
||||
areaInfo^.Bottom := seY2.Value;
|
||||
regionInfo:= vstRegions.GetNodeData(vstRegions.GetFirstSelected);
|
||||
regionInfo^.Areas.Rects[vstArea.AbsoluteIndex(node)] := areaInfo^;
|
||||
vstArea.InvalidateNode(node);
|
||||
pbArea.Repaint;
|
||||
end;
|
||||
@@ -429,7 +434,7 @@ end;
|
||||
procedure TfrmRegionControl.vstAreaChange(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode);
|
||||
var
|
||||
nodeInfo: ^TRect;
|
||||
areaInfo: ^TRect;
|
||||
selected: Boolean;
|
||||
begin
|
||||
selected := (Node <> nil) and Sender.Selected[Node];
|
||||
@@ -442,82 +447,92 @@ begin
|
||||
seY2.Enabled := selected;
|
||||
if selected then
|
||||
begin
|
||||
nodeInfo := Sender.GetNodeData(Node);
|
||||
seX1.Value := nodeInfo^.Left;
|
||||
seX2.Value := nodeInfo^.Right;
|
||||
seY1.Value := nodeInfo^.Top;
|
||||
seY2.Value := nodeInfo^.Bottom;
|
||||
areaInfo := Sender.GetNodeData(Node);
|
||||
seX1.Value := areaInfo^.Left;
|
||||
seX2.Value := areaInfo^.Right;
|
||||
seY1.Value := areaInfo^.Top;
|
||||
seY2.Value := areaInfo^.Bottom;
|
||||
end;
|
||||
pbArea.Repaint;
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.vstAreaGetText(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
||||
var CellText: WideString);
|
||||
var
|
||||
nodeInfo: ^TRect;
|
||||
areaInfo: ^TRect;
|
||||
begin
|
||||
nodeInfo := Sender.GetNodeData(Node);
|
||||
CellText := Format('(%d, %d), (%d, %d)', [nodeInfo^.Left, nodeInfo^.Top,
|
||||
nodeInfo^.Right, nodeInfo^.Bottom]);
|
||||
areaInfo := Sender.GetNodeData(Node);
|
||||
CellText := Format('(%d, %d), (%d, %d)', [areaInfo^.Left, areaInfo^.Top,
|
||||
areaInfo^.Right, areaInfo^.Bottom]);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.vstGroupsChange(Sender: TBaseVirtualTree;
|
||||
procedure TfrmRegionControl.vstRegionsChange(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode);
|
||||
var
|
||||
i: Integer;
|
||||
nodeArea: PVirtualNode;
|
||||
infoGroup: PRegionInfo;
|
||||
infoArea: ^TRect;
|
||||
Area: ^TRect;
|
||||
areaNode: PVirtualNode;
|
||||
regionInfo: PRegionInfo;
|
||||
areaInfo: ^TRect;
|
||||
begin
|
||||
vstArea.BeginUpdate;
|
||||
vstArea.Clear;
|
||||
if Node <> nil then
|
||||
begin {TODO : code style!!!!}
|
||||
infoGroup:=Sender.GetNodeData(Node);
|
||||
for i:=0 to infoGroup^.Areas.Count-1 do
|
||||
begin
|
||||
regionInfo := Sender.GetNodeData(Node);
|
||||
for i := 0 to regionInfo^.Areas.Count - 1 do
|
||||
begin
|
||||
nodeArea := vstArea.AddChild(nil);
|
||||
infoArea := vstArea.GetNodeData(nodeArea);
|
||||
Area := infoGroup^.Areas[i];
|
||||
infoArea^.Left := Area^.Left;
|
||||
infoArea^.Top := Area^.Top;
|
||||
infoArea^.Right := Area^.Right;
|
||||
infoArea^.Bottom := Area^.Bottom;
|
||||
areaNode := vstArea.AddChild(nil);
|
||||
areaInfo := vstArea.GetNodeData(areaNode);
|
||||
with regionInfo^.Areas.Rects[i] do
|
||||
begin
|
||||
areaInfo^.Left := Left;
|
||||
areaInfo^.Top := Top;
|
||||
areaInfo^.Right := Right;
|
||||
areaInfo^.Bottom := Bottom;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
vstArea.EndUpdate;
|
||||
pbArea.Repaint;
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.vstGroupsGetText(Sender: TBaseVirtualTree;
|
||||
procedure TfrmRegionControl.vstRegionsFreeNode(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode);
|
||||
var
|
||||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
regionInfo := Sender.GetNodeData(Node);
|
||||
if regionInfo^.Areas <> nil then FreeAndNil(regionInfo^.Areas);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.vstRegionsGetText(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
||||
var CellText: WideString);
|
||||
var
|
||||
nodeInfo: PRegionInfo;
|
||||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
nodeInfo := Sender.GetNodeData(Node);
|
||||
CellText := nodeInfo^.Name;
|
||||
regionInfo := Sender.GetNodeData(Node);
|
||||
CellText := regionInfo^.Name;
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.vstGroupsNewText(Sender: TBaseVirtualTree;
|
||||
procedure TfrmRegionControl.vstRegionsNewText(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode; Column: TColumnIndex; const NewText: WideString);
|
||||
var
|
||||
nodeInfo: PRegionInfo;
|
||||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
if (Node <> nil) then begin
|
||||
nodeInfo := Sender.GetNodeData(Node);
|
||||
nodeInfo^.Name := NewText;
|
||||
regionInfo := Sender.GetNodeData(Node);
|
||||
regionInfo^.Name := NewText;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.vstGroupsOnEditing(Sender: TBaseVirtualTree;
|
||||
procedure TfrmRegionControl.vstRegionsOnEditing(Sender: TBaseVirtualTree;
|
||||
Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
|
||||
begin
|
||||
Allowed := True;
|
||||
end;
|
||||
|
||||
|
||||
initialization
|
||||
{$I UfrmRegionControl.lrs}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user