Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2017, 22:16   #1
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
Восклицание ComboBox\PopupMenu Остаются полосы\тени после использования

С недавних пор после использования моей надстройки-формы, остается тень, даже после выгрузки из памяти приложения, обновление не помогает, не понимаю где утечка или что.
Суть:


Использую pmItems и вот такой обработчик Popup, но даже в обычном ComboBox тоже остается подобное.
Код:
Procedure TMainForm.pmItemsPopup(Sender: TObject);
var
  text:string;
Begin
  Try
    If cbbType.ItemIndex >= 0 Then
    Begin
      pmItems.Items.Clear;
      text:=PluginProc(Ord(PCGetList), 'ByPasses', PChar(Pinteger(cbbType.ItemIndex - 3)));
      if text<>'' then
        pmAddItems(text);
    End;
  Except
    On E: Exception Do
      Raise Exception.CreateFmt('"%s":"%s" in pmItemsPopup', [E.Message, E.ClassName, Name]);
  End;
End;

Procedure TMainForm.pmAddItems(Items: String);
Var
  i: integer;
  sarr: TArray<String>;
Begin
  Try
    pmItems.Items.Clear;
    sarr := Items.Split([#13 + #10]);
    For i := 0 To High(sarr) Do
      pmItems.Items.Add(NewItem(sarr[i], 0, False, True, MenuItemEdtAddClick, 0, 'MenuItem' + IntToStr(i)));
  Except
    On E: Exception Do
      Raise Exception.CreateFmt('"%s":"%s" in pmAddItems', [E.Message, E.ClassName, Name]);
  End;
End;
Ткните носом пожалуйста где утечка, ошибка или что-то не очищаю, очень бесит и мешает, может в стиле где-то просто тени выключить хотя-бы как костыль - подойдет...

П.С. Раньше такого не было, VCL не крутил не менял, но видимо что-то добавил и пошло поехало вот такое. Использую стандартный VCL и стили иногда.
IvaniuS вне форума Ответить с цитированием
Старый 04.01.2017, 22:49   #2
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Если программа не сверхсекретная выложите исходник.
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 04.01.2017, 22:58   #3
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

не секретная, там просто длл интерфейс - надстройка, ничего такого нету, завтра проснусь выложу.
IvaniuS вне форума Ответить с цитированием
Старый 05.01.2017, 03:02   #4
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от IvaniuS Посмотреть сообщение
не секретная, там просто длл интерфейс - надстройка, ничего такого нету, завтра проснусь выложу.
Окей,так будет проще разобратся
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 12.01.2017, 11:58   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Цитата:
Сообщение от IvaniuS Посмотреть сообщение
завтра проснусь выложу.
Мне уже страшно, человек не проснулся?
Arigato вне форума Ответить с цитированием
Старый 12.01.2017, 12:15   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дык может в спячку впал, рождественские каникулы они такие, мало ли ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.01.2017, 18:36   #7
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

Простите пожалуйста, костыль конечно, главное что проблему решает:
Суть проблемы оказать в Hint`aх
Решение в FormCreate формы
Присваиваем HintWindowClass := THintWindowWoShd;
Цитата:
type
THintWindowWoShd = Class(THintWindow)
Protected
Procedure CreateParams(Var Params: TCreateParams); Override;
End;

...

Procedure THintWindowWoShd.CreateParams(Var Params: TCreateParams);
Begin
Inherited CreateParams(Params);
Params.WindowClass.Style := Params.WindowClass.style And Not CS_DROPSHADOW;
End;

Procedure TMainForm.FormCreate(Sender: TObject);
Begin
HintWindowClass := THintWindowWoShd;
end;
Всем спасибо.
IvaniuS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отобразить 2 столбца в combobox после выбора ольгаг Microsoft Office Excel 1 20.12.2015 01:25
излишняя проверка после использования ключевого слова is hoz Общие вопросы .NET 4 11.03.2015 21:18
PopupMenu + ComboBox beegl Общие вопросы Delphi 1 08.06.2013 13:54
На фотобарабане остаются следы Yura_S Компьютерное железо 3 25.09.2010 12:13
virtualbox: не работает сеть на компе после использования этой проги bill_gates Софт 0 05.07.2009 13:03