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


Автор: valentos 29.5.2008, 14:58
Проблема такая. У меня на на фрэйме расположена сетка DBGrid. Обращение из главной формы приложения к компонентам расположеным на Frame не происходит, т.е. я немогу обратится к DBGrid расположенному на Фрэйме. Насколько я понял, главная форма невидет Frame, потому как фрэйм создается при исполнении приложения?!. Как можно обратится к компонентам на TFrame ? smile 
Спасибо заранее

Автор: pseud 29.5.2008, 16:47
Код

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FFrame: TExampleFrame;
  public
  end;
.........
procedure TForm1.FormCreate(Sender: TObject);
begin
  FFrame := TExampleFrame.Create;
  ........
end;


Добавлено через 1 минуту и 19 секунд
-----------
ну и обращайся к компонентам на TExampleFrame так:
Код

FFrame.DBGrid1......

Автор: valentos 29.5.2008, 19:55
а я делал вот так:
Код

  private
    { Private declarations }
  public
    { Public declarations }
  end;

  var
  MainForm: TMainForm;
  CurrentFrame : TFrame;


Код

if Assigned(CurrentFrame) then FreeAndNil(CurrentFrame);
      CurrentFrame := TOtgruzkaViewFrame.Create(MainForm);
       MainForm.UpdateFrame(Sender);

Код

сurrentFrame.dbgrid1....// не компилится

Чего так нехочет??? Неужеле надо только через член класса TForm, как сказал pseud??
pseud, 

Автор: pseud 30.5.2008, 09:04
Цитата(valentos @  29.5.2008,  19:55 Найти цитируемый пост)
сurrentFrame.dbgrid1....// не компилится


а так:
Код

TOtgruzkaViewFrame(сurrentFrame).dbgrid1....


Добавлено через 5 минут и 28 секунд
ведь ты объявил 
Код

CurrentFrame : TFrame;

компилятор и смотрит на него как на TFrame
а у TFrame нет свойства dbgrid1

если у тебя CurrentFrame бывает разных классов, а не только TOtgruzkaViewFrame
то пиши так
Код

if CurrentFrame is TOtgruzkaViewFrame then
  TOtgruzkaViewFrame(CurrentFrame).ляляля
else if CurrentFrame is TPupkinsViewFrame then
  TPupkinsViewFrame(CurrentFrame).ляляля

или так:
Код

procedure .....
var
  f: TOtgruzkaViewFrame;
begin
  if not (CurrentFrame is TOtgruzkaViewFrame) then
    Exit;
  f := TOtgruzkaViewFrame(CurrentFrame);
  f.DBGrid1.ляляля
.........
end;

Автор: Bose 30.5.2008, 15:17
Цитата(valentos @  29.5.2008,  19:55 Найти цитируемый пост)
Чего так нехочет??? Неужеле надо только через член класса TForm, как сказал pseud??

Потому что 
Код

 var
  CurrentFrame : TFrame;

Если бы было объявлено так, то всё работало бы
Код

 var
  CurrentFrame : TOtgruzkaViewFrame;


Автор: valentos 31.5.2008, 14:39
Спасибо!!! smile 

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