- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
1
1
Имеется графический обозреватель картинок, где мини-изображения хранятся в ImageList, а выводятся ListView (поименованные графические файлы). При открытие папок с картинками (где большое количество картинок) возникает торможение отображения. Вся программа начинает тормозить, ожидая загрузки картинок в ListView. Чтобы избежать такого, я вынес загрузку ListBox в отдельный процесс Thread. В результате возникла другая проблема: при загрузке картинок, часть загружается просто черными квадратами. Как избавиться от этого неприятного эффекта?
Код выбора папки для дальнейшего просмотра содержимого:
procedure TForm1.DirectoryListBox1Change(Sender: TObject);
begin
Form1.ListView1.Clear;
Form1.ImageList1.Clear;
NewThread:=TNewThread.Create(false);
NewThread.FreeOnTerminate:=true;
NewThread.Priority:=tpHighest;
NewThread.Resume;
end;
Код отдельно выделенного процесса:
procedure TNewThread.Execute;
begin
Form1.FillListView(form1.DirectoryListBox1.Directory , '*.jpg');
Form1.FillListView(form1.DirectoryListBox1.Directory, '*.bmp');
end;
И наконец код обработки графических файлов с последующей загрузкой в ListBox:
procedure TForm1.fillListView(path: string; mask: string = '*.jpg');
var
sr: TSearchRec;
img: TPicture;
bmp: TBitmap;
pic: TBitMap;
x,y: integer;
begin
img := TPicture.Create;
bmp := TBitMap.Create;
pic := TBitMap.Create;
With Form1 do
if FindFirst(path +'\'+mask, faAnyFile, sr) = 0 then
begin
repeat
if (sr.Name<>'.') and (sr.Name<>'..') and (sr.Attr<>faDirectory) then
//if (sr.Attr and $20) = $20 then
begin
try
img.LoadFromFile(path +'\'+ sr.Name);
except
Continue;
end;
bmp.Assign(img.Graphic);
x:=bmp.Width;
y:=bmp.Height;
pic.Width := ImageList1.Width;
pic.Height:= ImageList1.Height;
pic.Canvas.Brush.Color :=clWhite;
pic.Canvas.FillRect(Canvas.ClipRect);
pic.Canvas.StretchDraw(Rect(0,0,pic.Width, Round((pic.Height*y)/x)), bmp);
ImageList1.Add(pic, nil);
with ListView1.Items.Add do
begin
Caption := sr.Name;
ImageIndex := ListView1.Items.Count-1;
end;
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
img.Free;
bmp.Free;
pic.Free;
end;
Не сопротивляйся, смерть сладка.
http://hashcode.ru/questions/86688/delphi-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-listview-%D0%B2-%D0%B4%D0%B5%D0%BB%D1%84%D0%B8
Stertor 27.07.2013 16:42 # −2
guest 27.07.2013 17:47 # 0
guest 27.07.2013 17:49 # 0
an0nym 27.07.2013 17:24 # +1
anonimb84a2f6fd141 27.07.2013 21:46 # −2
guest 27.07.2013 21:47 # −2
anonimb84a2f6fd141 27.07.2013 22:27 # −8
guest 27.07.2013 22:40 # −6
guest 27.07.2013 22:42 # 0
eth0 27.07.2013 21:02 # −1
anonimb84a2f6fd141 27.07.2013 21:46 # 0
Уже по этому можно понять.
Lowezar 28.07.2013 01:09 # −7
Stertor 28.07.2013 19:59 # −2
anonimb84a2f6fd141 27.07.2013 22:33 # −2
>В мире биллион языков. Автор выбрал этот. Уважай его выбор, даже если он тебе не по душе.
"Уважать" в данном случае - забить болт.
Все-таки зачем сегодня нужен пасцаль и его отростки вроде лазаруса, на котором сто пудов пишут 3,5 человека? Почему бы не начать с языков со сборкой мусора?
vbs на универсальный язык, имхо, не потянет.
inkanus-gray 28.07.2013 19:34 # 0
Stertor 28.07.2013 20:04 # −2
Stertor 28.07.2013 20:05 # −2
Stertor 28.07.2013 20:06 # −2
inkanus-gray 28.07.2013 20:05 # 0
Обобщения не нужны. Компиляторов много. Который из них не генерирует нормальные исполняемые для винды?
Stertor 28.07.2013 20:07 # −2
Но Делфи не паскаль, паскаль не Делфи.
А компиляторов и впрямь много: FreePascal, TurboPascal, TMT Pascal, DEV Pascal - ни один из них не удовлетворяет моим требованиям.
inkanus-gray 28.07.2013 20:28 # +1
2. Free Pascal, Virtual Pascal и TMT Pascal генерируют для Win32 (FPC умеет и для Win64). Но это тоже Object Pascal.
3. Oxygene и PascalABC.NET генерируют код для Microsoft.NET, но это тоже Object Pascal.
4. Prospero Extended Pascal Compiler реализует Extended Pascal.
5. Наконец, gpc генерирует код для всего, что поддерживает gcc, но при этом реализует и Standard Pascal, и Extended Pascal, и Object Pascal, хотя и плохо совместим с Delphi.
Stertor 28.07.2013 20:29 # −1
inkanus-gray 28.07.2013 20:32 # −1
Stertor 28.07.2013 20:35 # −2
inkanus-gray 28.07.2013 20:37 # −2
И поясните, что означает низкоуровневщина.
Stertor 28.07.2013 20:46 # −1
vistefan 28.07.2013 20:56 # −5
А я думал, ты за визаульные четверги. Для той быдлятины, что ты, должно быть, кодишь, хватит и Notepad++ да компилера в консоли.
Stertor 28.07.2013 21:01 # −2
Ненормативная лексика
Stertor 28.07.2013 21:17 # −2
Stertor 28.07.2013 20:59 # −1
Stertor 28.07.2013 21:07 # −3
http://sho.rt-b.us/lib/archive/2007/08/caturday-goatse.jpg
Stertor 28.07.2013 21:27 # 0
Stertor 28.07.2013 21:31 # 0
Антиалкогольная пропаганда
Stertor 31.07.2013 22:13 # −1
1024-- 29.07.2013 02:09 # −2
А, зная JScript, можно плавно перейти на веб.