213 |
|
|
214 |
|
|
215 |
|
|
216 |
– |
function CompareItems(List: TStringList; I1, I2: Integer): Integer; |
217 |
– |
var |
218 |
– |
fin: Boolean; |
219 |
– |
pos: Integer; |
220 |
– |
s1, s2: String; |
221 |
– |
begin |
222 |
– |
fin := False; |
223 |
– |
s1 := MidStr(List[I1], 1, PosEx(';', List[I1], 6) - 1); |
224 |
– |
s2 := MidStr(List[I2], 1, PosEx(';', List[I2], 6) - 1); |
225 |
– |
pos := 1; |
226 |
– |
Result := 0; |
227 |
– |
repeat |
228 |
– |
if Ord(s1[pos]) < Ord(s2[pos]) then |
229 |
– |
begin |
230 |
– |
Result := -1; |
231 |
– |
fin := True; |
232 |
– |
end |
233 |
– |
else if Ord(s1[pos]) > Ord(s2[pos]) then |
234 |
– |
begin |
235 |
– |
Result := 1; |
236 |
– |
fin := True; |
237 |
– |
end; |
238 |
– |
Inc(pos); |
239 |
– |
until fin or (pos > Length(s1)) or (pos > Length(s2)); |
240 |
– |
|
241 |
– |
if not fin then |
242 |
– |
begin |
243 |
– |
if pos > Length(s1) then |
244 |
– |
Result := -1 |
245 |
– |
else |
246 |
– |
Result := 1; |
247 |
– |
end; |
248 |
– |
end; |
249 |
– |
|
216 |
|
function TAccess_OUP_ADB.GetFilesList(ext: String; pattern: String; |
217 |
|
NoEmptyFiles: Boolean; SortType: TSortType): TStrings; |
218 |
|
var |
251 |
|
end; |
252 |
|
|
253 |
|
begin |
254 |
< |
list := TStringList.Create; |
289 |
< |
if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then |
290 |
< |
list.Sorted := False |
291 |
< |
else |
292 |
< |
list.Sorted := True; |
293 |
< |
for i := 0 to GetFileCount - 1 do |
254 |
> |
if not (SortType in [ST_ExtNameAsc, ST_ExtNameDesc]) then |
255 |
|
begin |
256 |
< |
if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and |
257 |
< |
((Length(pattern) = 0) or |
258 |
< |
(Pos(UpperCase(pattern), UpperCase(Fdat_files[i].Name)) > 0)) then |
256 |
> |
list := TStringList.Create; |
257 |
> |
list.Sorted := True; |
258 |
> |
for i := 0 to GetFileCount - 1 do |
259 |
|
begin |
260 |
< |
if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then |
260 |
> |
if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and |
261 |
> |
((Length(pattern) = 0) or |
262 |
> |
(Pos(UpperCase(pattern), UpperCase(Fdat_files[i].Name)) > 0)) then |
263 |
|
begin |
264 |
< |
id := FormatNumber(Fdat_files[i].ID, 5, '0'); |
265 |
< |
name := Fdat_files[i].Name; |
266 |
< |
extension := Fdat_files[i].Extension; |
267 |
< |
|
268 |
< |
case SortType of |
269 |
< |
ST_IDAsc, ST_IDDesc: list.Add(id + ';' + name + ';' + extension); |
270 |
< |
ST_NameAsc, ST_NameDesc: list.Add(name + ';' + id + ';' + extension); |
271 |
< |
ST_ExtAsc, ST_ExtDesc: list.Add(extension + ';' + id + ';' + name); |
272 |
< |
ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id); |
264 |
> |
if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then |
265 |
> |
begin |
266 |
> |
id := FormatNumber(Fdat_files[i].ID, 5, '0'); |
267 |
> |
name := Fdat_files[i].Name; |
268 |
> |
extension := Fdat_files[i].Extension; |
269 |
> |
|
270 |
> |
case SortType of |
271 |
> |
ST_IDAsc, ST_IDDesc: list.Add(id + ';' + name + ';' + extension); |
272 |
> |
ST_NameAsc, ST_NameDesc: list.Add(name + ';' + id + ';' + extension); |
273 |
> |
ST_ExtAsc, ST_ExtDesc: list.Add(extension + ';' + id + ';' + name); |
274 |
> |
ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id); |
275 |
> |
end; |
276 |
|
end; |
277 |
|
end; |
278 |
|
end; |
279 |
< |
end; |
280 |
< |
if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then |
281 |
< |
list.CustomSort(CompareItems); |
282 |
< |
if not Assigned(Result) then |
283 |
< |
Result := TStringList.Create; |
284 |
< |
if list.Count > 0 then |
279 |
> |
if not Assigned(Result) then |
280 |
> |
Result := TStringList.Create; |
281 |
> |
if list.Count > 0 then |
282 |
> |
begin |
283 |
> |
fields := TStringList.Create; |
284 |
> |
if SortType in [ST_IDAsc, ST_NameAsc, ST_ExtAsc, ST_ExtNameAsc] then |
285 |
> |
for i := 0 to list.Count - 1 do |
286 |
> |
begin |
287 |
> |
getfields; |
288 |
> |
Result.Add(id + '-' + name + '.' + extension); |
289 |
> |
end |
290 |
> |
else |
291 |
> |
for i := list.Count - 1 downto 0 do |
292 |
> |
begin |
293 |
> |
getfields; |
294 |
> |
Result.Add(id + '-' + name + '.' + extension); |
295 |
> |
end; |
296 |
> |
fields.Free; |
297 |
> |
end; |
298 |
> |
list.Free; |
299 |
> |
end |
300 |
> |
else |
301 |
|
begin |
302 |
< |
fields := TStringList.Create; |
303 |
< |
if SortType in [ST_IDAsc, ST_NameAsc, ST_ExtAsc, ST_ExtNameAsc] then |
304 |
< |
for i := 0 to list.Count - 1 do |
305 |
< |
begin |
306 |
< |
getfields; |
307 |
< |
Result.Add(id + '-' + name + '.' + extension); |
308 |
< |
end |
309 |
< |
else |
310 |
< |
for i := list.Count - 1 downto 0 do |
311 |
< |
begin |
312 |
< |
getfields; |
313 |
< |
Result.Add(id + '-' + name + '.' + extension); |
314 |
< |
end; |
315 |
< |
fields.Free; |
302 |
> |
FQuery.SQL.Text := 'SELECT id, name, extension FROM datfiles ' + |
303 |
> |
'WHERE Length(name) > 0 ORDER BY extension ASC, name ASC;'; |
304 |
> |
FQuery.Open; |
305 |
> |
if not Assigned(Result) then |
306 |
> |
Result := TStringList.Create; |
307 |
> |
if FQuery.RecordCount > 0 then |
308 |
> |
begin |
309 |
> |
FQuery.First; |
310 |
> |
repeat |
311 |
> |
name := FormatNumber(FQuery.FieldByName('id').AsInteger, 5, '0') + |
312 |
> |
'-' + FQuery.FieldByName('name').AsString + '.' + |
313 |
> |
FQuery.FieldByName('extension').AsString; |
314 |
> |
if SortType = ST_ExtNameAsc then |
315 |
> |
Result.Add(name) |
316 |
> |
else |
317 |
> |
Result.Insert(0, name); |
318 |
> |
FQuery.Next; |
319 |
> |
until FQuery.EOF; |
320 |
> |
end; |
321 |
> |
FQuery.Close; |
322 |
|
end; |
335 |
– |
list.Free; |
323 |
|
end; |
324 |
|
|
325 |
|
|