|
[x]
Posted via EE Mobile
|
||
Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again. |
||
| Question |
|
[x]
Attachment Details
|
||
|
[x]
The Solution Rating System
|
||
With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.
Your Input Matters If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support. Thank you! |
||
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, StdCtrls, ImgList, ExtCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Splitter1: TSplitter;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
ADOQuery1: TADOQuery;
ADOConnection1: TADOConnection;
FolderBtn: TButton;
FileBtn: TButton;
ImageList1: TImageList;
RichEdit1: TRichEdit;
Button3: TButton;
procedure Button3Click(Sender: TObject);
procedure RichEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FolderBtnClick(Sender: TObject);
procedure FileBtnClick(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure savetree(t: ttreeview);
procedure loadtree(t: TTreeView);
procedure saveNode(n: TTreeNode);
function findNode(t:TTreeView; id: integer): TTreeNode;
procedure AddItem(aText: string; aIndex: Integer; aParent: TTreeNode);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TItem = class(TObject)
private
fStatus: byte;
fParentID: integer;
fNodeText: string;
fID: integer;
fData: string;
fSaver: TAdoQuery;
fChanged: Boolean;
fSaveImmediate: boolean;
fIsNew: Boolean;
fImageIndex: integer;
procedure SetData(const Value: string);
procedure SetNodeText(const Value: string);
procedure SetParentID(const Value: integer);
procedure SetStatus(const Value: byte);
procedure SetImageIndex(const Value: integer);
protected
procedure Changed; dynamic;
public
constructor Create(aSaver: TAdoQuery; AId, AParentID: integer; AStatus: byte);
constructor LoadFromDataset(aSaver: TAdoQuery);
procedure BeginUpdate;
procedure EndUpdate;
procedure Delete;
procedure Save;
published
property ID: integer read fID write fID;
property ParentID: integer read fParentID write SetParentID;
property ImageIndex: integer read fImageIndex write SetImageIndex;
property Status: byte read FStatus write SetStatus;
property Data: string read fData write SetData;
property NodeText: string read fNodeText write SetNodeText;
end;
{ TItem }
procedure TItem.BeginUpdate;
begin
fSaveImmediate := false;
end;
(*---------------------------------------------------*)
procedure TItem.Changed;
begin
fChanged := True;
if fSaveImmediate then Save;
end;
(*---------------------------------------------------*)
constructor TItem.Create(aSaver: TAdoQuery; AId, AParentID: integer;
AStatus: byte);
begin
inherited Create;
fChanged := False;
fSaveImmediate := True;
fIsNew := True;
fSaver := aSaver;
fID := AID;
fParentID := AParentID;
fStatus := AStatus;
fNodeText := '';
fData := '';
end;
(*---------------------------------------------------*)
procedure TItem.Delete;
begin
//
end;
(*---------------------------------------------------*)
procedure TItem.EndUpdate;
begin
fSaveImmediate := True;
if fChanged then Save;
end;
(*---------------------------------------------------*)
constructor TItem.LoadFromDataset(aSaver: TAdoQuery);
begin
Create(aSaver, 0, 0, 0);
if not aSaver.IsEmpty then
begin
fId := aSaver.FieldByName('ID').AsInteger;
fParentID := aSaver.FieldByName('PARENT').AsInteger;
fStatus := aSaver.FieldByName('STATUS').AsInteger;
fNodeText := aSaver.FieldByName('NAME').AsString;
if aSaver.FindField('DATA') <> nil then
fData := aSaver.FieldByName('DATA').AsString;
fImageIndex := aSaver.FieldByName('IMAGE_INDEX').AsInteger;
fIsNew := False;
end;
end;
(*---------------------------------------------------*)
procedure TItem.Save;
begin
if fIsNew then
fSaver.SQL.Text :=
'insert into tree (parent, name, status, image_index, data) values (:v1, :v2, :v3, :v4, :v5)'
else
fSaver.SQL.Text :=
'update tree set parent = :v1, name = :v2, status = :v3, image_index = :v4, data = :v5 where id = :v6';
fSaver.Parameters.ParamByName('v1').Value := fparentID;
fSaver.Parameters.ParamByName('v2').Value := fNodeText;
fSaver.Parameters.ParamByName('v3').Value := fStatus;
fSaver.Parameters.ParamByName('v4').Value := fImageIndex;
fSaver.Parameters.ParamByName('v5').Value := fData;
if not fIsNew then
fSaver.Parameters.ParamByName('v6').Value := fId;
fSaver.ExecSQL;
if fIsNew then
begin
fSaver.SQL.Text :=
'SELECT id from tree order by id desc';
fSaver.Open;
fId := fSaver.FieldByName('ID').asInteger;
fSaver.Close;
fIsNew := False;
end;
fChanged := False;
end;
(*---------------------------------------------------*)
procedure TItem.SetData(const Value: string);
begin
if fData <> Value then
begin
fData := Value;
Changed;
end;
end;
(*---------------------------------------------------*)
procedure TItem.SetImageIndex(const Value: integer);
begin
if fImageIndex <> Value then
begin
fImageIndex := Value;
Changed;
end;
end;
(*---------------------------------------------------*)
procedure TItem.SetNodeText(const Value: string);
begin
if fNodeText <> Value then
begin
fNodeText := Value;
Changed;
end;
end;
(*---------------------------------------------------*)
procedure TItem.SetParentID(const Value: integer);
begin
if fParentId <> Value then
begin
fParentID := Value;
Changed;
end;
end;
(*---------------------------------------------------*)
procedure TItem.SetStatus(const Value: byte);
begin
if fStatus <> Value then
begin
FStatus := Value;
Changed;
end;
end;
(*---------------------------------------------------*)
procedure TForm1.AddItem(aText: string; aIndex: Integer; aParent: TTreeNode);
var n: TTreeNode;
data: TItem;
parentId: integer;
begin
parentId := 0;
if (aParent <> nil) and (TItem(aParent.Data) <> nil) then
parentId := TItem(aParent.Data).ID;
data := TItem.Create(AdoQuery1, -1, parentId, 0);
data.NodeText := aText;
data.ImageIndex := aIndex;
n := TTreeNode.Create(TreeView1.Items);
n.Text := data.NodeText;
n.ImageIndex := data.ImageIndex;
n.SelectedIndex := data.ImageIndex;
TreeView1.Items.AddNode(n, aParent, aText, data, naAddChild);
end;
(*---------------------------------------------------*)
procedure TForm1.Button1Click(Sender: TObject);
begin
loadTree(treeview1);
end;
(*---------------------------------------------------*)
procedure TForm1.Button2Click(Sender: TObject);
begin
savetree(treeview1);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
node : TTreeNode;
mess, str : string;
key_stat : integer;
begin
Node := Treeview1.Selected;
if Assigned(Node) then
begin
str := Node.Text;
mess := 'Are you sure that you want to delete the';
Case Node.Level of
0 : mess := mess + ' folder : ' +#13+#13 + str + ' ???' +#13+
'All folders, subfolders, items and subitems' +#13+ 'will be permanently deleted !!' +#13;
1 : mess := mess + ' item : ' +#13+#13 + str + ' ???' + #13;
end;
with Application do
begin
NormalizeTopMosts;
key_stat := MessageBox(pchar(mess), ' Confirmation', MB_YESNO);
RestoreTopMosts;
end;
if key_stat = 7 then Exit; // 6 - YES ; 7 - N0
TreeView1.Items.Delete(Treeview1.Selected);
end
else ShowMessage('Select a folder in the treeview first.');
end;
(*---------------------------------------------------*)
procedure TForm1.FileBtnClick(Sender: TObject);
var aText: string;
begin
if (TreeView1.Selected <> nil) and (TreeView1.Selected.ImageIndex = 15) then
begin
if InputQuery('File', 'Enter a file name', aText) then
AddItem(aText, 17, TreeView1.Selected);
end else
ShowMessage('Select a folder in the treeview first.');
end;
(*---------------------------------------------------*)
function TForm1.findNode(t: TTreeView; id: integer): TTreeNode;
var i:integer;
begin
i:=0;
while (i<t.items.count) and (TItem(t.items[i].data).ID<>id) do
inc(i);
if i<t.items.count then result:=t.items[i]
else result:=nil;
end;
(*---------------------------------------------------*)
procedure TForm1.FolderBtnClick(Sender: TObject);
var aText: string;
aParent: TTreeNode;
begin
aParent := nil;
if TreeView1.Selected <> nil then
begin
if TreeView1.Selected.ImageIndex = 15 then
aParent := TreeView1.Selected
else
begin
ShowMessage('Select a folder first');
Exit;
end;
end;
if InputQuery('Folder', 'Enter a folder name', aText) then
AddItem(aText, 15, aParent);
end;
(*---------------------------------------------------*)
procedure TForm1.FormCreate(Sender: TObject);
var
conn_str:string;
begin
conn_str:='provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=';
conn_str:=conn_str+IncludeTrailingPathDelimiter(ExtractFilePath(Application.Exename));
conn_str:=conn_str+'test.pkd;';
ADOConnection1.Connected:=False;
ADOConnection1.ConnectionString:=conn_str;
ADOConnection1.Connected:=True;
ADOConnection1.Open;
end;
(*---------------------------------------------------*)
procedure TForm1.loadtree(t: TTreeView);
var
p, n: TTreeNode;
data: TItem;
begin
t.Items.Clear;
ADOQuery1.SQL.Text := 'select * from tree order by parent asc';
ADoQuery1.Open;
while not ADoQuery1.Eof do
begin
data := TItem.LoadFromDataset(AdoQuery1);
p := FindNode(t, data.ParentID);
n := t.items.AddChildObject(p, data.NodeText, data);
n.ImageIndex := data.ImageIndex;
n.SelectedIndex := data.ImageIndex;
AdoQuery1.Next;
end;
AdoQuery1.Close;
end;
(*---------------------------------------------------*)
procedure TForm1.saveNode(n: TTreeNode);
var i, aParent: integer;
item: TItem;
begin
item := TItem(n.Data);
if item <> nil then
begin
item.BeginUpdate;
try
Item.NodeText := n.Text;
aParent := 0;
if (n.Parent <> nil) and (TItem(n.Parent.Data) <> nil) then
aParent := TItem(n.Parent.Data).ID;
Item.ParentID := aParent;
Item.ImageIndex := n.ImageIndex;
finally
Item.EndUpdate;
end;
end;
for i := 0 to n.Count-1 do SaveNode(n.Item[i]);
end;
(*---------------------------------------------------*)
procedure TForm1.savetree(t: ttreeview);
var n: TTreeNode;
begin
n := t.items.getFirstNode;
while n <> nil do
begin
SaveNode(n);
n := n.getNextSibling;
end;
end;
(*---------------------------------------------------*)
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
RichEdit1.Text := '';
if (Node <> nil) and (Node.ImageIndex = 15) then
RichEdit1.Text := TItem(Node.Data).Data;
end;
(*---------------------------------------------------*)
procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var n: TTreeNode;
begin
n := TreeView1.Selected;
if (n <> nil) and (n.ImageIndex = 15) then
begin
TItem(n.Data).fSaveImmediate := False;
TItem(N.Data).Data := RichEdit1.Text;
end;
end;
(*---------------------------------------------------*)
end.
|
Advertisement
| Hall of Fame |