Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TFrame, Выгружается с ошибкой Abstract Error 
:(
    Опции темы
Mephisto
Дата 18.10.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Добрый день. Столкнулся со следующей проблемой. Необходимо выгружать фрейм из памяти и освобождать объектную переменную. Во время этой процедуры высвечивается ошибка "Abstact error". Может кто-то сталкивался с подобной проблемой? Как этого избежать?
Кстати, после ошибки фрейм все-таки выгружается. smile
За ранее спасибо.
PM   Вверх
_hunter
Дата 18.10.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



самый банальный способ: засунуть код в try except.
а вообще код показывай -- не должно такого быть...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alex
Дата 18.10.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Ошибка в 17 строке...


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Mephisto
  Дата 20.10.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Вот небольшой проектик. Состоит из одной формы и фрейма.
Не могу понять почему при второй выгрузке выскакивает ошибка?

Код формы (нажать Alt+F12)
Код
object Form1: TForm1
  Left = 230
  Top = 162
  Width = 696
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object pMain: TPanel
    Left = 64
    Top = 64
    Width = 409
    Height = 249
    Caption = 'pMain'
    TabOrder = 0
  end
  object cmdOpenFrame: TButton
    Left = 344
    Top = 360
    Width = 75
    Height = 25
    Caption = 'Load Frame'
    TabOrder = 1
    OnClick = cmdOpenFrameClick
  end
end

Код фрейма (нажать Alt+F12)
Код
object fMemo: TfMemo
  Left = 0
  Top = 0
  Width = 320
  Height = 240
  TabOrder = 0
  object Memo1: TMemo
    Left = 32
    Top = 32
    Width = 153
    Height = 161
    Lines.Strings = (
      'Memo1')
    TabOrder = 0
  end
  object cmdExit: TButton
    Left = 216
    Top = 32
    Width = 75
    Height = 25
    Caption = 'cmdExit'
    TabOrder = 1
    OnClick = cmdExitClick
  end
end



Код модуля фомы
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Unit2;

type
  TForm1 = class(TForm)
    pMain: TPanel;
    cmdOpenFrame: TButton;
    procedure cmdOpenFrameClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  var fMain:TfMemo;

implementation


{$R *.dfm}

procedure TForm1.cmdOpenFrameClick(Sender: TObject);
begin
  if fMain = nil Then
  begin
    fMain := TfMemo.Create(pMain);
    fMain.Parent := pMain;
    fMain.Align := alClient;
  end
  else
    ShowMessage('TTT');
end;

end.


Код модуля фрейма.
Код
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls;

type
  TfMemo = class(TFrame)
    Memo1: TMemo;
    cmdExit: TButton;
    procedure cmdExitClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

uses Unit1;

{$R *.dfm}

procedure TfMemo.cmdExitClick(Sender: TObject);
begin
  Free;
  Unit1.fMain:= nil;
end;

end.


В первом же случае на фрейме присутствуют Query. Так вот после закрытия последнего програма выдает критическую ошибку.
PM   Вверх
_hunter
Дата 20.10.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



Код

procedure TfMemo.cmdExitClick(Sender: TObject);    
begin    
  Free;

нельзя самоудалением заниматься...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Mephisto
Дата 20.10.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



Цитата(_hunter @ 20.10.2005, 16:36)
нельзя самоудалением заниматься...

А как лучше? Мне совсем нужно выгрузить фрейм из памяти.
PM   Вверх
Rennigth
Дата 20.10.2005, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Mephisto
Нельзя дестроить объект из самого себя, функции
procedure TfMemo.cmdExitClick(Sender: TObject);
некуда возвращаться. Есть много вариантов решения проблемы.
1. Дестhоить из вне класса TfMemo.
2. Дестроить в функции вызванной в PostMessage.
3. с Action-ами наверное можно возиться и настроить на удаление.
...

Это сообщение отредактировал(а) Rennigth - 20.10.2005, 17:09


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
_hunter
Дата 20.10.2005, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



тут:
http://forum.vingrad.ru/index.php?showtopic=66834
такая же проблема решалась ( и решилась ) посмотри последние посты и сделай так же.
( там на билдере, но смысл, думаю, понятен )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Girder
Дата 21.10.2005, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата(_hunter @ 20.10.2005, 17:36)
нельзя самоудалением заниматься...
Кто тебе енто сказал?
http://forum.vingrad.ru/index.php?showtopi...ndpost&p=369164


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
_hunter
Дата 21.10.2005, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



это, конечно, хорошо, но что будет если у той Button1 назначен еще и OnMouseUp?
+ ладно, скажу не "нельзя", а "очень не желательно".


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Girder
Дата 21.10.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата(_hunter @ 21.10.2005, 15:06)
но что будет если у той Button1 назначен еще и OnMouseUp?
Оно не будет обработанно.



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Mephisto
Дата 24.10.2005, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 1
Всего: 34



2Girder
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Free;
end;


Вот именно так я и выгружаю долбанный фрейм.
Кстати, я заметил что ошибка вылетает если на нем существует TQuery. Я пытаюсь удалить фрейм после его закрытия.
Блин, сейчас не могу скинуть исходник. Мне его надо предварительно распотрошить. Потому как он ОЧЕНЬ огромен. А это лиш один из немногих фреймов. smile

2_hunter, прикольный кодик на билдере. Мне понравилось. smile Попробую че-нить в этом духе... Если получится, выложу сюда. smile
Добавлено @ 09:54
Цитата(Mephisto @ 20.10.2005, 16:54)
Цитата (_hunter @ 20.10.2005, 16:36)
нельзя самоудалением заниматься...


А как лучше? Мне совсем нужно выгрузить фрейм из памяти.

Может напится и забытся? smile
PM   Вверх
Girder
Дата 24.10.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата(Mephisto @ 24.10.2005, 10:52)
Вот именно так я и выгружаю долбанный фрейм.
Если посмотриш внимательно по ссылке... то там не так smile



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1016 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.