Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Прорисовка формы


Автор: кмс 19.3.2012, 13:02
Здравствуйте.
Есть главное окно, на котором расположен PageControl и на нем уже разные элементы - Image,  кнопки, мемо итд.
При клике по Image появляется вторая форма на котором тоже на всю форму расположен Image. Проблема в том, когда закрываю вторую форму, то на первой форме какое то время остаются фрагменты от второй формы. 
Конечно не смертельно, но неприятно. Как можно избавиться от этого?
Наверно не совсем понятно что я имел ввиду, поэтому выкладываю видео(6мб) и скрин.

Видео - http://zalil.ru/32905098




Автор: Snowy 19.3.2012, 13:49
Закрываешь как? Form2.Close? Попробуй сделать.
Код

  Form2.Hide;
  Application.ProcessMessages;
  Form2.Close;
Больше похоже на какой-то анимационный эффект, чем на глюк.

Автор: кмс 19.3.2012, 14:33
Snowy, не помогло.
Закрываю просто Close;
Не знаю, у меня там с анимацией ни чего не связано, да и вообще никаких визуальных эффектов не делал.

Автор: LegionnaireFH 20.3.2012, 11:59
Здравствуйте. 
Попробуйте добавить в Events второй формы  событие OnClose с кодом:
Код

Form1.Repaint;

Так же этот код можно добавить в событие OnActivate первой формы.

Автор: кмс 20.3.2012, 17:16
LegionnaireFH, тоже не помогло. Я все варианты с обновлением формы перепробовал.

Автор: LegionnaireFH 20.3.2012, 17:30
А если сместить расположение первой формы, то содержимое перерисовывается? Функцию WinAPI  InvalidateRect тоже пытались использовать?

Автор: Frees 20.3.2012, 17:43
Драйвера на видяху нормально установлены?

Добавлено через 1 минуту и 21 секунду
покажи код как окно с картинкой создаешь и показываешь. 

Автор: кмс 20.3.2012, 22:28
LegionnaireFH, если перемещаю первую форму то нормально, если перемешаю вторую, то такая же проблема. 
InvalidateRect не пробовал, завтра проверю.
На счет видяхи, я проверял прогу на другом компе(ноуте) та же проблема, да и сын на компе в игры играет, вроде не жаловался.
Вот полностью код вызова второго окна:
Код

procedure TForm1.Image1Click(Sender: TObject);
var
  RS: TResourceStream;
begin
  if (ComboBox1.ItemIndex = 0) and (ComboBox2.ItemIndex = 0) then
  begin
    Exit;
  end;
  Form2.Caption := 'Picture View  ' + ComboBox1.text;

    if (Modul = 30) or (Modul = 31) then
    begin
      RS := TResourceStream.Create(H2, '30_31_', RT_RCDATA);
      GIF := TImagingGIF.Create;
      GIF.LoadFromStream(RS);
      Form2.Image1.Picture.Graphic := GIF;
    end
    else
    begin
      RS := TResourceStream.Create(H2, IntToStr(Modul) + '_', RT_RCDATA);
      GIF := TImagingGIF.Create;
      GIF.LoadFromStream(RS);
      Form2.Image1.Picture.Graphic := GIF;
    end;
    Form2.Show;

  RS.Free;
  GIF.Free;
end;

Забыл указать версию дельфи - XE

Автор: northener 21.3.2012, 00:10
Цитата(кмс @  19.3.2012,  13:02 Найти цитируемый пост)
Наверно не совсем понятно что я имел ввиду, поэтому выкладываю видео

На видео никаких артефактов не смог увидеть.

Автор: кмс 21.3.2012, 08:49
northener, скрин выхоложенный выше из этого видео, на нем вроде все видать что я имею ввиду.
Создал пустой проект, накидал элементов, добавил вторую форму, такой эффект присутствует, но еле заметный, все происходит быстро.
Бросил на первую форму PageControl и все стало так же как в моей проге smile

Автор: LegionnaireFH 21.3.2012, 09:04
Не пробовали выполнять следующий код после закрытия второй формы? 
Код

  RS.Free;
  GIF.Free;

Автор: кмс 21.3.2012, 09:46
Вообщем удалось полностью избавиться от проблемы, перед закрытием второй формы, свойство(второй формы) AlphaBlend выставляю в true, а перед открытием выставляю в false.
Можно и сразу в настройках выставить в true, но тогда при первом показе второй формы, весь Image1 залит черным цветом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)