-
Постов
10 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Володимир Антонашко
-
-
Может дело в том что я колонке glyphcolumn пробую присвоить string?
-
У меня на версии berlin так работать не хочет. А точнее изображение выводиться. Но только с индексом 0.
-
Представляю.. Я вчера попробовал. Клиенту нужен в таком случае ssd и мощное железо. Да.. Вариант плохой. Есть идеи как организовать по другому.
-
Я тут подумал.. Что может я выбрал неправильный путь. Может лучше вообще не загружать все через imagelist? Может в drawcolumncell прописать загрузку напрямую из файла. Но тут проблема что интернете нету толком инструкций как пойти напрямую. Может у кого-то завалялся подходящий кусок кода?
-
Здраствуйте.
В программе я заполняю Tgrid изображениями из Imagelist по имени фото который есть в ячейке . Код :
if column.index = 8 then //Загрузка картинок. if not value.IsEmpty then begin column.BeginUpdate; i:=StrToInt(maingr.Cells[column.Index,row]); imageindex:=main_form.ImageList1.Source.IndexOf(IntToStr(i)); column.Canvas.Clear(RowColor.Color); main_form.ImageList1.draw(column.Canvas,bounds,imageindex,100); column.EndUpdate; end;
Если я уберу очистку канвы то изображения накладуються. А так как есть следующий раз при вызове DrawColumnCell изображение остается только в последней записи.
Но такой код в процедуре SelectCell нормально отображает изображение. На каждый вызов. Даже если изображение в ячейке нету.
if acol = 8 then begin i:=maingr.Cells[Acol,Arow]; imageindex:=main_form.ImageList1.Source.IndexOf(i); imageviewer1.Bitmap.Clear(TAlphaColors.Null); imageviewer1.Bitmap:=main_form.ImageList1.Bitmap(size,imageindex); end;
И по поводу памяти. Как я понял, после того как я присвою изображение ячейке, оно загружается в память. Также когда отображается в ImageViewer.
Но после удаления строки с изображениям, память остается занята для уже использованных изображений. То есть при повторном показе память больше не занимается и используется изображение которое было ранее загружено. Думаю это нормальное поведение. Так увеличивается скорость работы программы. Но я собираюсь показывать до 50 фотографий одновременно (средний размер 1мб) из 5-10 тисяч. И мне нужно чтоб после использования изображений память очищалась, иначе программа будет кушать под 10гб оперативной памяти.
-
Извините все утро на это потратил и забыл проверить очевидное. Нужно больше спать.
Когда создавал tempbase поставил почему то direct=false, и забыл. Спасибо всем за помощь.
-
Могу добавить что пробовал на windows xp и windows 7. Результат аналогичен. Связка unidac+sqlite в директ режиме. Local.connected точно true. Работа с базой ведеться в основном потоке нормально.
-
Визуально только опредилить работу могу. Memo не очищаеться. И в tempbase ничего не пишеться.
procedure localbackup.memcount; begin count:=main.main_form.sqlmemo.Lines.Count; end; procedure localbackup.updatememo; var i:integer; begin setlength(mem,0); setlength(mem,main.main_form.sqlmemo.Lines.Count); tempbase.SQL.Clear; tempbase.SQL.Append('SELECT * FROM queries'); tempbase.Active:=True; for I := 0 to main.main_form.sqlmemo.Lines.Count-1 do begin tempbase.Insert; tempbase.FieldByName('sql_rec').AsString:=main.main_form.sqlmemo.Lines[i]; tempbase.Post; {tempbase.SQL.Append(main.main_form.sqlmemo.Lines[i]);} end; tempbase.Active:=false; main.main_form.sqlmemo.Lines.Clear; end; procedure localbackup.Execute; begin { Place thread code here } tempdbcreate; base:=Tuniquery.Create(nil); base.Connection:=main.main_form.local; while True do begin sleep(5000); if main.main_form.local.Connected then begin synchronize(memcount); if (count)>0 then begin Synchronize(updatememo); writeinbase; writeinbackup; end; end else begin /// locstatus(1,'str'); sleep(15000); end; end; end;
-
Здраствуйте, не знаю в чем проблема. Поток в програме работает на моей машине, в не зависимосте как запустил програму, в среде или нет. С vcl проблем небыло, а сейчас перевел на fmx. Поток должен мониторить визуальный компонент и если нада обращаться к бд.
А на стороннем пк поток не запускаеться. Запускаю так.
var th : SomeThread; begin th := SomeThread.Create; th.FreeOnTerminate := true; th.Resume; end;
Освобождение памяти. И перерисовка Tcolumn.
в TImageList - с XE8
Опубликовано
Извиняюсь. Действительно все правильно работает. У меня ошибка была в другом месте. Но проблема с памятью осталась. Использование всего трех фотографий по 1мб заняли аж 10мб ОЗУ. Мне нужно найти способ освобождать память после удаление фотографий из stringgrid.