/[projects]/dao/DelphiScanner/Components/tpsystools_4.04/examples/Delphi/ExDQueU.pas
ViewVC logotype

Annotation of /dao/DelphiScanner/Components/tpsystools_4.04/examples/Delphi/ExDQueU.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2671 - (hide annotations) (download)
Tue Aug 25 18:15:15 2015 UTC (8 years, 10 months ago) by torben
File size: 5915 byte(s)
Added tpsystools component
1 torben 2671 (* ***** BEGIN LICENSE BLOCK *****
2     * Version: MPL 1.1
3     *
4     * The contents of this file are subject to the Mozilla Public License Version
5     * 1.1 (the "License"); you may not use this file except in compliance with
6     * the License. You may obtain a copy of the License at
7     * http://www.mozilla.org/MPL/
8     *
9     * Software distributed under the License is distributed on an "AS IS" basis,
10     * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11     * for the specific language governing rights and limitations under the
12     * License.
13     *
14     * The Original Code is TurboPower SysTools
15     *
16     * The Initial Developer of the Original Code is
17     * TurboPower Software
18     *
19     * Portions created by the Initial Developer are Copyright (C) 1996-2002
20     * the Initial Developer. All Rights Reserved.
21     *
22     * Contributor(s):
23     *
24     * ***** END LICENSE BLOCK ***** *)
25    
26     unit ExDQueU;
27    
28     interface
29    
30     uses
31     Windows, Messages, SysUtils, Classes, Graphics, Controls,
32     Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,
33    
34     StConst, StBase, StUtils, StList, StDQue;
35    
36     type
37     S10 = string[10];
38     TSTDlg = class(TForm)
39     CreateBtn: TButton;
40     Edit1: TEdit;
41     PushHeadBtn: TButton;
42     PopHeadBtn: TButton;
43     HeadBtn: TButton;
44     TailBtn: TButton;
45     LB1: TListBox;
46     LoadBtn: TButton;
47     SaveBtn: TButton;
48     OD1: TOpenDialog;
49     SD1: TSaveDialog;
50     ClearBtn: TButton;
51     PushTailBtn: TButton;
52     PopTailBtn: TButton;
53    
54     procedure FormCreate(Sender: TObject);
55     procedure FormClose(Sender: TObject; var Action: TCloseAction);
56    
57     procedure CreateBtnClick(Sender: TObject);
58     procedure PushHeadBtnClick(Sender: TObject);
59     procedure PopHeadBtnClick(Sender: TObject);
60     procedure HeadBtnClick(Sender: TObject);
61     procedure TailBtnClick(Sender: TObject);
62     procedure LoadBtnClick(Sender: TObject);
63     procedure SaveBtnClick(Sender: TObject);
64     procedure ClearBtnClick(Sender: TObject);
65     procedure PushTailBtnClick(Sender: TObject);
66     procedure PopTailBtnClick(Sender: TObject);
67     private
68     { Private declarations }
69     public
70     { Public declarations }
71     MyDQue : TStDQue;
72    
73     procedure FillListBox;
74     procedure UpdateButtons(QueOK : Boolean);
75     end;
76    
77     const
78     MaxElem = 100;
79     var
80     STDlg: TSTDlg;
81    
82     implementation
83    
84     {$R *.DFM}
85    
86     procedure MyDelNodeData(Data : pointer); far;
87     {-procedure to delete data pointer in each node
88     during call to TSTList.Destroy}
89     begin
90     FreeMem(Data, SizeOf(S10));
91     end;
92    
93     function MyLoadData(Reader : TReader) : Pointer; far;
94     begin
95     GetMem(Result, SizeOf(S10));
96     S10(Result^) := Reader.ReadString;
97     end;
98    
99     procedure MyStoreData(Writer : TWriter; Data : Pointer); far;
100     begin
101     Writer.WriteString(S10(Data^));
102     end;
103    
104     procedure TSTDlg.FormCreate(Sender: TObject);
105     begin
106     RegisterClasses([TStDQue,TStListNode]);
107     UpdateButtons(False);
108     end;
109    
110     procedure TSTDlg.FormClose(Sender: TObject;
111     var Action: TCloseAction);
112     begin
113     MyDQue.Free;
114     end;
115    
116     procedure TSTDlg.FillListBox;
117     var
118     PN : TStListNode;
119     begin
120     LB1.Clear;
121     LB1.Perform(WM_SETREDRAW, 0, 0);
122     PN := MyDQue.Head;
123     while (PN <> nil) do
124     begin
125     LB1.Items.Add(S10(PN.Data^));
126     PN := MyDQue.Next(PN);
127     end;
128     LB1.Perform(WM_SETREDRAW, 1, 0);
129     LB1.Update;
130     end;
131    
132     procedure TSTDlg.UpdateButtons(QueOK : Boolean);
133     begin
134     ClearBtn.Enabled := QueOK;
135     PushHeadBtn.Enabled := QueOK;
136     PopHeadBtn.Enabled := QueOK;
137     PushTailBtn.Enabled := QueOK;
138     PopTailBtn.Enabled := QueOK;
139     HeadBtn.Enabled := QueOK;
140     TailBtn.Enabled := QueOK;
141     SaveBtn.Enabled := QueOK;
142     end;
143    
144     procedure TSTDlg.CreateBtnClick(Sender: TObject);
145     var
146     I : Integer;
147     S : ^S10;
148     begin
149     if Assigned(MyDQue) then
150     MyDQue.Free;
151    
152     UpdateButtons(False);
153     MyDQue := TStDQue.Create(TStListNode);
154    
155     MyDQue.DisposeData := MyDelNodeData;
156     MyDQue.LoadData := MyLoadData;
157     MyDQue.StoreData := MyStoreData;
158    
159     for I := 1 to MaxElem do
160     begin
161     GetMem(S, SizeOf(S10));
162     S^ := 'Item' + IntToStr(I);
163     MyDQue.Append(S);
164     end;
165     FillListBox;
166     UpdateButtons(True);
167     end;
168    
169     procedure TSTDlg.ClearBtnClick(Sender: TObject);
170     begin
171     MyDQue.Clear;
172     Edit1.Text := '';
173     FillListBox;
174     UpdateButtons(False);
175     end;
176    
177     procedure TSTDlg.PushHeadBtnClick(Sender: TObject);
178     var
179     NewString : ^S10;
180     begin
181     if (Edit1.Text = '') then
182     begin
183     ShowMessage('No value entered');
184     Exit;
185     end;
186     GetMem(NewString,SizeOf(S10));
187     NewString^ := Edit1.Text;
188     MyDQue.PushHead(NewString);
189     FillListBox;
190     end;
191    
192     procedure TSTDlg.PopHeadBtnClick(Sender: TObject);
193     begin
194     MyDQue.PopHead;
195     FillListBox;
196     end;
197    
198     procedure TSTDlg.PushTailBtnClick(Sender: TObject);
199     var
200     NewString : ^S10;
201     begin
202     if (Edit1.Text = '') then
203     begin
204     ShowMessage('No value entered');
205     Exit;
206     end;
207     GetMem(NewString,SizeOf(S10));
208     NewString^ := Edit1.Text;
209     MyDQue.PushTail(NewString);
210     FillListBox;
211     end;
212    
213     procedure TSTDlg.PopTailBtnClick(Sender: TObject);
214     begin
215     MyDQue.PopTail;
216     FillListBox;
217     end;
218    
219     procedure TSTDlg.HeadBtnClick(Sender: TObject);
220     var
221     Data : Pointer;
222     begin
223     MyDQue.PeekHead(Data);
224     Edit1.Text := S10(Data^);
225     end;
226    
227     procedure TSTDlg.TailBtnClick(Sender: TObject);
228     var
229     Data : Pointer;
230     begin
231     MyDQue.PeekTail(Data);
232     Edit1.Text := S10(Data^);
233     end;
234    
235     procedure TSTDlg.LoadBtnClick(Sender: TObject);
236     begin
237     if (OD1.Execute) then
238     begin
239     if (NOT Assigned(MyDQue)) then
240     begin
241     UpdateButtons(False);
242     MyDQue := TStDQue.Create(TStListNode);
243    
244     MyDQue.DisposeData := MyDelNodeData;
245     MyDQue.LoadData := MyLoadData;
246     MyDQue.StoreData := MyStoreData;
247     end;
248     MyDQue.LoadFromFile(OD1.FileName);
249     FillListBox;
250     UpdateButtons(True);
251     end;
252     end;
253    
254     procedure TSTDlg.SaveBtnClick(Sender: TObject);
255     begin
256     if (SD1.Execute) then
257     MyDQue.StoreToFile(SD1.FileName);
258     end;
259    
260     end.

  ViewVC Help
Powered by ViewVC 1.1.20