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


Автор: AnacRon 12.6.2008, 23:03
Доброго времени суток! Значить относительно недавно появилась необходимость сделать такой вариант: имеется с десяток другой форм, и соответственно главная, на которой расположены ListBox  с перечнем индексов форм, Panel1 в рамки которой хотелось бы выводить содержимое форм (я так подозреваю что здесь надо будет использовать не TForm a TPage). Вот и при выборе нужной строки в ListBox в Panel1 рисовать содержимое форм.
кстати будет интересен совет и по поводу возможности пополнения количества списка форм (так думаю что путем копирования DLL c  формой внутри). чисто технически интересно как это осуществить...
Свои догадки имеются но настолько деревянные что и догадками назвать то сложно хотелось бы мнение проффи...  smile 
заранее спасибо!

Автор: pseud 13.6.2008, 09:19
Цитата(AnacRon @  12.6.2008,  23:03 Найти цитируемый пост)
с перечнем индексов форм


конкретизируй, что за индексы.

Цитата(AnacRon @  12.6.2008,  23:03 Найти цитируемый пост)
Panel1 в рамки которой хотелось бы выводить содержимое форм


вот пример, если в листбоксе храниться список имен форм связанных со ссылками на сами формы:

Код

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Panel1: TPanel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    FMyActiveForm: TForm;
    procedure SetMyActiveForm(const Value: TForm);
    { Private declarations }
  public
    property MyActiveForm: TForm read FMyActiveForm write SetMyActiveForm;
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.AddItem(Form2.Name, Form2);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  if ListBox1.ItemIndex > -1 then
    MyActiveForm := TForm(ListBox1.Items.Objects[ListBox1.ItemIndex]);
end;

procedure TForm1.SetMyActiveForm(const Value: TForm);
begin
  if FMyActiveForm <> nil then
  begin
    FMyActiveForm.Parent := nil;
    FMyActiveForm.Visible := False;
  end;
  FMyActiveForm := Value;
  FMyActiveForm.Align := alClient;
  FMyActiveForm.Parent := Panel1;
  FMyActiveForm.Visible := True;
end;

Автор: MetalFan 13.6.2008, 10:10
при использовании форм в DLL код усложнится...

Автор: AnacRon 15.6.2008, 11:09
Цитата(pseud @ 13.6.2008,  09:19)
конкретизируй, что за индексы.

Суть вопроса Вами было понята верно! пример приложенный именно то, что я хотел! спасибо smile 

Цитата(MetalFan @ 13.6.2008, 10:10)
при использовании форм в DLL код усложнится...

тоеть есть варианты проще? просто мой сорец сейчас реализует 20 задач! затем если понадобится мне добавить еще хотя бы парочку это мне придется перекомпилить всю рогу и заменить у человека который ее уже использует.. не всегда удобно... тоесть принцип ядра и плагинов  интересен... пока гугль мне ничего по этому поводу стоящего не подсказал

Автор: AnacRon 15.6.2008, 21:53
 smile спасиб ребятки! похоже выходные не прошли даром! похоже до етого момента или я с гуглем плохо дружил или просто в глаза не видел хорошей штуки http://www.drkb.ru/
на 200 шагов продвинулся! ссори за оФФтоп

Автор: MetalFan 15.6.2008, 22:17
накидал тут за полчаса простой пример с плагинами и формами в них.
если интересно - в аттаче.

Автор: AnacRon 17.6.2008, 09:32
Цитата(MetalFan @ 15.6.2008,  22:17)
накидал тут за полчаса простой пример с плагинами и формами в них.
если интересно - в аттаче.

спасибо я примерно так и начал делать, но камней подводных нарыл с которыми после примера разобрался

теперь совсем не могу сообразить в другом немного.... на первой форму рисую
Код

procedure TForm1.ShowForm2;
var
  f : TForm2;
begin
  f := TForm2.Create (Self);
  f.Parent := Self;
  f.Show;
end;

а вот проблема в том что события клавы не Form2 не обрабатывает... думал не беда и обработаю в Form1 при условии активности Form2, но не тут-то было... выдает ошибку Access violation при обращении к объектам второй формы
Код

      Form2.Label1.Caption := 'текст';

Автор: pseud 17.6.2008, 09:53
AnacRon,  smile 
ай ай ай
ну кто ж так делает?

Цитата(AnacRon @  17.6.2008,  09:32 Найти цитируемый пост)
Form2.Label1.Caption := 'текст';


а создал ли ты Form2
ведь в твоем примере видно что создал ты лишь переменную 
Код

f : TForm2;

тем более локальную, о которой никто за пределами процедуры не знает
а если ты хочешь работать с перемнной Form2, то позаботься о ее создании
повторяю:
Form2 - это перемнная класса TForm2

Автор: AnacRon 17.6.2008, 11:17
pseud, Form2 точно создана! а на счет локальности я и не подумал даже верней не заметил.... спасибо
стыдно за невнимательность....

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