Ordenação com Numero e String em um ListBox
Nobres colegas, estou tendo certa dificuldade em fazer uma ordenação em um ListBox com números e strings
Salvo as imagens contidas em meu banco em uma pasta temporária. Ex.: 001.jpg,002.jpg,003.jpg, etc.
Depois tenho que recuperar essas imagens e listar em um ListBox para com o componente eDocEngine, transformar em PDF.
Porém, quando as imagens são listadas no ListBox, as mesmas não seguem a ordem e ficam da seguinte forma:
001.jpg
0010.jpg
0011.jpg
0012.jpg
...
002.jpg
0020.jpg
etc.
Como procedo para que as imagens fiquem na ordem correta? 001.jpg, 002.jpg, 003.jpg, ....
Abaixo o código utilizado para executar os procedimentos
Que poder me dar alguma dica fico grato,
Abraço.
Salvo as imagens contidas em meu banco em uma pasta temporária. Ex.: 001.jpg,002.jpg,003.jpg, etc.
Depois tenho que recuperar essas imagens e listar em um ListBox para com o componente eDocEngine, transformar em PDF.
Porém, quando as imagens são listadas no ListBox, as mesmas não seguem a ordem e ficam da seguinte forma:
001.jpg
0010.jpg
0011.jpg
0012.jpg
...
002.jpg
0020.jpg
etc.
Como procedo para que as imagens fiquem na ordem correta? 001.jpg, 002.jpg, 003.jpg, ....
Abaixo o código utilizado para executar os procedimentos
procedure TfrmVerImagemLic.AdvGlassButton8Click(Sender: TObject);
var
LI: Integer;
LFileExtension: string;
Arq: TsearchRec;
begin
DelArq(*.jpg, C:\G2DOC\Temp);
if not DirectoryExists(C:\G2DOC\Temp\) then ForceDirectories(C:\G2DOC\Temp\);
//SALVA AS IMAGENS NA PASTA TEMP
try
MSG.Visible := True;
MSG.Caption := Preparando Imagens! Aguarde..;
Screen.Cursor := crSqlWait;
Application.ProcessMessages;
DM.cds_Licitacao_Img.First;
while not DM.cds_Licitacao_Img.Eof do
begin
TBlobField(DM.cds_Licitacao_Img.FieldByName(Imagem)).SaveToFile(C:\G2DOC\Temp\ + 00 + DM.cds_Licitacao_ImgPAGINA_NUMERO.Text + .jpg);
DM.cds_Licitacao_Img.Next
end;
finally
MSG.Visible := False;
Screen.Cursor := crDefault;
DM.cds_Licitacao_Img.First
end;
//CARREGA NO LIST BOX E GERA O ARQUIVO PDF COM O COMPONENTE eDocEngine
if FindFirst(C:\G2DOC\Temp\*.jpg, faArchive, Arq) = 0 then
begin
try
MSG.Visible := True;
MSG.Caption := Gerando PDF. Aguarde..;
Screen.Cursor := crSqlWait;
Application.ProcessMessages;
repeat
Application.ProcessMessages;
ListBox1.Items.Add(Arq.Name);
until FindNext(Arq) <> 0;
if (ListBox1.Count = 0) then Exit;
if (RG1.ItemIndex = 0) then
begin
dlgSave1.FileName := Licitacao + DM.cds_Licitacao_ImgNUMERO_PROCESSO.Text;
if not dlgSave1.Execute then Exit;
with gtPDFEngine1 do
begin
FileName := dlgSave1.FileName;
MeasurementUnit := muPixels;
Preferences.ProcessAfterEachPage := False;
for LI := 0 to (ListBox1.Count - 1) do
begin
img1.Picture.LoadFromFile(C:\G2DOC\Temp\ + ListBox1.Items[LI]);
Page.PaperSize := Custom;
Page.Width := img1.Picture.Width;
Page.Height := img1.Picture.Height;
if (LI <> 0) then
NewPage
else
BeginDoc;
LFileExtension := ExtractFileExt(ListBox1.Items[LI]);
if (((CompareText(LFileExtension, .wmf) = 0) or
(CompareText(LFileExtension, .emf) = 0)) and (not chk1.Checked)) then
begin
PlayMetafile(img1.Picture.Metafile);
end
else
begin
DrawImage(0, 0, img1.Picture.Graphic);
end;
end;
EndDoc;
end;
end;
FindClose(Arq);
finally
DelArq(*.jpg, C:\G2DOC\Temp);
ListBox1.Clear;
MSG.Visible := False;
Screen.Cursor := crDefault;
end;
end;
end;
Que poder me dar alguma dica fico grato,
Abraço.
Ralp Bezerra
Curtidas 0
Respostas
Wilton Júnior
04/01/2012
Tudo joia companheiro, se minha memória não falha esse ordenação é caracteristo de string, digamos então que para string é normal que ordene dessa forma, o que pode tentar é queria um vetor inteiro e depois transportar para o listbox.
GOSTEI 0
Ralp Bezerra
04/01/2012
Não entendi o que quiz dizer.
Teria algum exemplo?
Abraço.
Teria algum exemplo?
Abraço.
GOSTEI 0
Ralp Bezerra
04/01/2012
Será que existe algum outro componente que mantenha a ordenação dos arquivos como estão no disco?
GOSTEI 0
Ralp Bezerra
04/01/2012
Bastou adicionar zeros a esquerda na hora de salvar que o problema foi resolvido.
Abraço.
Abraço.
GOSTEI 0