Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.04.2013, 08:28
serenberg serenberg вне форума
Прохожий
 
Регистрация: 17.09.2012
Сообщения: 7
Репутация: 10
По умолчанию Нужна помощь, проблемы с TFrame

Создан компонент TActionFrame

Код:
  TFrameAction = class(TFrame)
    ScrollBox1: TScrollBox;
    LabEdName: TLabeledEdit;
    LabedPath: TLabeledEdit;
    LabEdType: TLabeledEdit;
    LabEdSize: TLabeledEdit;
    LabEdDate: TLabeledEdit;
    BtnClear: TRzBitBtn;
    BtnExit: TRzBitBtn;
    StatBar: TStatusBar;
    LProc: TLabel;
    RzSepr1: TRzSeparator;


    procedure BtnClearClick(Sender: TObject);
    procedure BtnExitClick(Sender: TObject);

  protected
    {Protected declaration}
  FObjType : byte;
  FMainAction  : byte;
  FParam :string;  
...
 var
  FrameAction: TFrameAction;

на главной форме имеет имя TFrameAction1

по нажатию клавиши исп. след. код

Код:
procedure TFrameAction.BtnClearClick(Sender: TObject);
var
inifilename : string;
begin

BtnClear.Enabled := false;
Cleaner := TCleaner.Create(FrameAction);
inifilename := ExtractFileName(Application.ExeName);
inifilename := ChangeFileExt(inifilename, '.ini');
Cleaner.LoadFromIni(inifilename);
case ObjType of
1:  Cleaner.ObjForClean := 1;
2:  Cleaner.ObjForClean := 2;
3:  Cleaner.ObjForClean := 3;
end;
S := FrameAction.Param;
Cleaner.PathObjForClean.Add(FrameAction.Param);
Cleaner.MainCleanFunc;
FormMain.ShellListView.Refresh;
end;

проблема в строке
Код:
Cleaner := TCleaner.Create(FrameAction);

выдает FrameAction : nil


TCleaner.Create выглядит следующим образом
Код:
constructor TCleaner.Create(Form:TFrame);
var
    pixNum:integer;
begin
    FObjForClean:=0;
    FPathObjForClean:=TStringList.Create;

    Lab:= TLabel.Create(Form);

         with Lab do
           begin
                 Parent:=Form;
                 Caption:='0%';
                 Transparent:=true;
                 Left:=678;
                 Top:= 320;
                 Font.name:= 'MS Sans Serif';
                 Font.Size:=8;
                 Font.Color:=clBlack;
            end;

     ProgrBar:= TProgressBar.Create(Form);
     with ProgrBar do
              begin
                 Parent:=Form;
                 Width:=617;
                 Height:=24;
                 Left:=14;
                 Top:=312;
                 //Orientation:=TOrientation(orHorizontal);
                 Position:=0;
              end;

end;
Ответить с цитированием
  #2  
Старый 12.04.2013, 09:49
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Код:
procedure TFrameAction.BtnClearClick(Sender: TObject);
...
begin  
  ...
 Cleaner := TCleaner.Create(self); //<<==--!!!!!!!!!!!!
......
  S := Self.Param; //<<==--!!!!!!!!!!!!
  Cleaner.PathObjForClean.Add(S); //<<==--!!!!!!!!!!!!
...
не оно ?
Ответить с цитированием
  #3  
Старый 12.04.2013, 12:51
serenberg serenberg вне форума
Прохожий
 
Регистрация: 17.09.2012
Сообщения: 7
Репутация: 10
По умолчанию

Нет, мне надо чтобы этот TCleaner при create создавал свои компоненты на Frame, все компилиться только вот ошибка "Error read of adress..", из-за того что при
Код:
 Cleater : = TCleaner.create(ActionFrame) 

ActionFrame = nil

пока еще не победил это )))
Ответить с цитированием
  #4  
Старый 12.04.2013, 13:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну дык а где собственно вы его создаете этот FrameAction? Где вызов конструктора для него?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 15.04.2013, 10:16
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Вы вызываете TCleaner.Create из метода TFrameAction. В момент нажатия на кнопку BtnClear какой-то FrameAction( FrameAction1,FrameAction2 ...) уже существует. И внутри обработчика BtnClearClick именно он и является Self. Что я и советовал сделать в своём первом посте.
а код
Код:
var  
  FrameAction: TFrameAction;
лучше удалите, чтобы Вас потом не путать. Если работать с Frame стандартным способом, в переменную FrameAction никогда ничего не будет присвоено.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter