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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2016, 11:57   #1
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию Проблема с динамическими формами

Доброго времени суток!

Создаю форму вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  New: TForm2;
begin
    Application.CreateForm(TForm2, New);
    New.Caption := 'Новая форма';
    New.Name := 'form' + (IntToStr(i));
    New.Show;
end;
1 проблема:

На форме которая создается есть кнопка которая должна уничтожать форму:

Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
  Free;
end;
ну если создать 2 формы, одна уничтожится, а при уничтожение второй получаю ошибку invalid pointer operation

2 проблема:

необходимо скролить WebBrowser

Код:
var
  web_brows: tWebBrowser;

....

procedure TForm2.FormShow(Sender: TObject);
var
  Flags, TargetFrameName, PostData, Cancel, Headers: OleVariant;
begin
  web_brows := wb1;
  web_brows.Navigate('', Flags, TargetFrameName, PostData, Headers);
end;

procedure TForm2.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  web_brows.OleObject.Document.ParentWindow.ScrollBy(0, +37);
end;

procedure TForm2.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  web_brows.OleObject.Document.ParentWindow.ScrollBy(0, -37);
end;
если создать больше 1 формы, то скролить будет только в последней.
nibufep вне форума Ответить с цитированием
Старый 06.05.2016, 12:07   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
1 проблема
Free замени на Close. И в событии OnClose
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.05.2016, 12:22   #3
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

первая проблема оказывается была в другом, по кнопке должен еще и таймер уничтожать (иначе после уничтожения формы он продолжает работать)

Код:
procedure TForm2.FormShow(Sender: TObject);
begin
  Timer := TTimer.Create(nil);
  Timer.Interval := 3000;
  Timer.OnTimer := TimerProc;
  Timer.Enabled := false;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  Timer.Free;
  Free;
end;
как тогда правильно его уничтожить?
nibufep вне форума Ответить с цитированием
Старый 06.05.2016, 12:29   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Что бы при уничтожении формы таймер на автомате уничтожался создавай так
Код:
Timer := TTimer.Create(Self);
А Free формы из её метода (и не только формы) нельзя. Делай как в #2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.05.2016, 12:42   #5
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

Спасибо!
а что на счет второй проблемы?
nibufep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c# проблема с формами yura0392 Помощь студентам 0 11.04.2013 20:36
Проблема с динамическими массивами San4o Общие вопросы Delphi 5 13.09.2009 21:15
Delphi... Проблема с динамическими массивами (попытка чтения по неправильному адресу) g0liath Помощь студентам 2 12.05.2009 08:45
Проблема с динамическими массивами Arassir Помощь студентам 2 11.11.2008 00:15
проблема с формами dima00 Общие вопросы Delphi 4 16.04.2007 20:11