Как получить все формы из приложения DLL Delphi

#delphi #delphi-2010

Вопрос:

Я хочу получить все формы из DLL-приложения Delphi для приведения, что-то вроде этого, но не с использованием форм MDIChild, а обычных форм: (Это из Delphi 4, мне нужно что-то подобное в Delphi RAD STUDIO, но я не знаю, как это сделать)

 for i:= Application.MainForm.MDIChildCount-1 downto 0 do
    if (Application.MainForm.MDIChildren[i] is FormNameNeeded) then
    begin
      variable := (Application.MainForm.MDIChildren[i] as FormNameNeeded).FunctionNeeded;
      break;
    end;
 

Комментарии:

1. Вы смешиваете Delphi 4 и Delphi 2010 для создания основных EXE и DLL?

2. @PeterWolf, нет, я просто хочу чего-то подобного, но на данный момент все, что у меня есть, — это пример DELPHI4 основной идеи моего требования.

3. На самом деле не совсем ясно, чего вы на самом деле хотите. Библиотеки DLL не отслеживают формы, которые у них есть, поэтому нет прямого способа их перебора.

4. @RemyLebeau Область действия-обновить (закрыть/открыть) один компонент набора данных клиента из формы 1 с помощью формы 2, форма 2 вручную привязана к управлению страницей Form1. Я думал, что это может быть достигнуто путем приведения всех форм, как в примере, который я показываю, чтобы я мог получить доступ к компонентам ClientDataSet формы 1 из формы 2

5. Пожалуйста, не отвлекайте читателей не относящимся к делу кодом «что-то вроде этого, но совершенно другое», Вместо этого покажите код, как вы MainForm.PageControl заполняете форму(формы), которые она содержит, и какую информацию вы хотите получить доступ из основной формы (или встроенной формы).

Ответ №1:

Из того, что вы сказали в своем комментарии, чтобы прояснить (полностью переформулировать) вашу проблему, вам не нужно повторять все формы.

Вы находитесь в контексте формы 2. Как Form2 «Вручную привязано к управлению страницей Form1», то Parent свойством Form2 будет управление страницей (или, что более вероятно, табличный лист).

Учитывая таблицу вкладок, легко добраться до формы, в которой она размещена. Вы могли бы использовать что-то вроде этого:

   var
    pCandidate:  TComponent;
  begin
    pCandidate:=Self.Parent;
    if(pCandidate<>nil) then
    begin
      while((pCandidate<>nil) And not(pCandidate is TForm1)) do
        pCandidate:=pCandidate.Owner;
    end;
    if(pCandidate<>nil) then
      TForm1(pCandidate).FunctionNameNeeded();
  end;