Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];

Вниз

VCL кконтролы. Рушится шрифт.   Найти похожие ветки 

 
Andy BitOff ©   (2015-04-24 15:48) [0]

Может кто сталкивался. После некоторого времени работы с программой, рушатся шрифты.

Вот скрин нормальной работы
http://s7.postimg.org/sfjjdnfgr/norm.jpg

А вот после сбоя
http://s4.postimg.org/cd2f4m3y5/bug.jpg

Даже не представляю куда копать, из-за чего это может происходить. Память не течет, хендлы тоже. ХЗ просто.


 
Rouse_ ©   (2015-04-24 15:56) [1]

Эт не шрифты, это у тебя с GDI проблемы. Проверь на наличие утечки GDI хэндлов в процесс мониторе. Скорее всего пропустил где-то парный SelectObject().


 
Rouse_ ©   (2015-04-24 15:57) [2]

ЗЫ, ну либо второй вариант - через чур много GDI объектов создал (они ограничены).


 
Andy BitOff ©   (2015-04-24 16:00) [3]

Нет GDI хендлы не текут. Проверял. Стабильно примерно 1000, а ограничение на 10000.


 
Rouse_ ©   (2015-04-24 16:01) [4]

Значит порушил DC через SelectObject


 
Andy BitOff ©   (2015-04-24 16:07) [5]

До начала работы
http://i.imgur.com/uR4PRON.png

После сбоя
http://i.imgur.com/eziF9hC.png


 
Rouse_ ©   (2015-04-24 16:14) [6]

Ты не общие данные дай, а данные по процессу


 
DVM ©   (2015-04-24 16:18) [7]

Выбрали новый шрифт в DC, а старый, который был там до этого уничтожили, потом выбрали обратно уничтоженный - будет как раз такая картина. И утечек не будет.
Баги это в программе, где то затирается память.


 
Andy BitOff ©   (2015-04-24 16:35) [8]


> Rouse_ ©   (24.04.15 16:14) [6]
>
> Ты не общие данные дай, а данные по процессу

Это для процесса. Это вкладка Performance для процесса из ProcessExplorer"а


 
Andy BitOff ©   (2015-04-24 16:36) [9]


> DVM ©   (24.04.15 16:18) [7]

Да, интересно. Надо посмотреть. Есть подозрения, на любителей хранить в переменных полученные DC и объекты из SelectObject.


 
Rouse_ ©   (2015-04-24 16:42) [10]


> Это для процесса. Это вкладка Performance для процесса из
> ProcessExplorer"а

А, ну туда не лазил, достаточно было обычного таксмона :)
Ну тогда да - единственный варинат, именно битый DC посредством SelectObject.


 
mike-d ©   (2015-04-24 17:20) [11]

Скрины из первого поста очень похожи на проблему с kb3013455
http://answers.microsoft.com/ru-ru/windows/forum/windows_vista-windows_update/%D0%B8%D1%81%D0%BF%D0%BE%D1%80%D1%87%D0%B5%D0%BD/5ac53682-218c-43e1-95b8-9b23e080ee43


 
Дмитрий С ©   (2015-04-24 17:40) [12]

Проверил, действительно так происходит


unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 DeleteObject(Font.Handle);
end;

end.


 
Eraser ©   (2015-04-24 18:36) [13]


> Andy BitOff ©   (24.04.15 15:48) 

где-нибудь не в основном потоке есть работа с графикой через VCL классы типа tbitmap?


 
Andy BitOff ©   (2015-04-24 18:42) [14]


> Eraser ©   (24.04.15 18:36) [13]

Если честно, то фиг знает, очень много кода, но скорее всего нет. Пока нашел некорректную работу с DC и объектами от SelectObject поправлю там потом будем дальше посмотреть.


 
Rouse_ ©   (2015-04-24 18:51) [15]


> Andy BitOff ©   (24.04.15 18:42) [14]
>
> > Eraser ©   (24.04.15 18:36) [13]
>
> Если честно, то фиг знает, очень много кода, но скорее всего
> нет. Пока нашел некорректную работу с DC и объектами от
> SelectObject поправлю там потом будем дальше посмотреть.
>

Отследить неверную работу с данной АПИ достаточно просто, сделай новую папку, туда перетащи юнит в котором обьявлена SelectObject, данный юнит в нстройках среды обьяви самым первым.
После чего напиши шлюз, чтобы его вызывали, вместо нативной SelectObject, внутри которого вызывай оригинальную функцию.
Добавь логирование - запусти проект и проверь, что и как там все происходит.
Бо глазками ты устанешь все проверять.


 
Andy BitOff ©   (2015-04-24 19:01) [16]

Да, похоже ошибка найдена.

Закоментировал все (3) DeleteObject в подозрительном месте - баг изчез, но текут гди хендлы. Но тут уже ясно и понятно что делать, надо переписывать.

Виноваты во всем, как и предполагалось, любители сохранять DC и объекты из SelectObject, которые не понимают чего делают :) Приходится ходить за ними и подтирать.

Всем большое спасибо. Если чо, еще напишу ;)



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
15-1429522423
pavelnk
2015-04-20 12:33
2015.12.20
По Андроиду


2-1403689302
Imagination
2014-06-25 13:41
2015.12.20
Не работает CopyPaste


2-1403717600
Sakipiel
2014-06-25 21:33
2015.12.20
как добавить элемент в наследника TCollection


2-1403529768
Sakipiel
2014-06-23 17:22
2015.12.20
Все события на одной процедуре


2-1403765627
Вася
2014-06-26 10:53
2015.12.20
Раскраска строк DBGrid относительно значения поля текущей строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский