#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;