Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2013, 11:38   #11
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
А теперь вопрос вам ВСЕ ЕЩЕ НУЖЕН этот масссив Forms.
Перешёл на TObjectList
Form1
Код:
var
  Form1: TForm1;
  Forms: TObjectList;
...
procedure TForm1.ListView1Click(Sender: TObject);
var
  i: Integer;
begin
  Forms := TObjectList.Create(True);
  i := Forms.Add(TForm2.Create(Application));
  TForm2(Forms[i]).txt := ListView1.Items[ListView1.ItemIndex].Caption;
  TForm2(Forms[i]).MyProcedure;
end;
Form2
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus;

type
  TForm2 = class(TForm)
    Button2: TButton;
    Edit1: TEdit;
    PopupMenu1: TPopupMenu;
    est1: TMenuItem;
    Button1: TButton;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    txt: string;
    procedure MyProcedure;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

type
  TMyThread_Thread = class(TThread)
  private
    { Private declarations }
    s: string;
    txt: string;
    MyForm: TForm2;
  protected
    procedure Execute; override;
    procedure SyncProc;
  public
  end;

var
  Form2: TForm2;
  MyThread_Thread: TMyThread_Thread;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

procedure TForm2.MyProcedure;
begin
  MyThread_Thread := TMyThread_Thread.Create(True);
  MyThread_Thread.txt := txt;
  MyThread_Thread.MyForm := Self;
  MyThread_Thread.FreeOnTerminate := True;
  MyThread_Thread.Resume;
end;

procedure TMyThread_Thread.Execute;
begin
  s := txt;
  Synchronize(SyncProc);
end;

procedure TMyThread_Thread.SyncProc;
begin
  MyForm.Caption := s;
  MyForm.Edit1.Text := s;
  MyForm.Show;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  MyProcedure;
end;

end.
Работает и пока без ошибок.
Цитата:
Сообщение от evg_m Посмотреть сообщение
Без глобальной переменной никак нельзя иначе где держать полученную переменную пока формы "живёт"?

Последний раз редактировалось Shouldercannon; 27.08.2013 в 11:59.
Shouldercannon вне форума Ответить с цитированием
Старый 27.08.2013, 13:10   #12
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Без глобальной переменной никак нельзя иначе где держать полученную переменную пока формы "живёт"?
В полях классов.
Цитата:
myform: TForm2;
Цитата:
Код:
var
  Form2: TForm2;
  MyThread_Thread: TMyThread_Thread;
Цитата:
Код:
procedure TForm2.MyProcedure;
begin
  MyThread_Thread := TMyThread_Thread.Create(True);
При каждом создании формы мы ТЕРЯЕМ ссылку на поток созданный предыдущей формой. Теперь предыдущий поток НИКАК не остановить, пока работает приложение.

И не дай бог создание форм тоже уйдет в потоки (одновременное создание нескольких форм).

Цитата:
Без глобальной переменной никак нельзя иначе где держать полученную переменную пока формы "живёт"?
а зачем ее держать, приложение и так держит все СОЗДАННЫЕ И НЕ УНИЧТОЖЕННЫЕ формы Screen.Forms.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 27.08.2013 в 13:14.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[WinForms] много экземпляров дочерней формы Glen Windows Forms 1 23.07.2012 20:33
Открыть несколько файлов из проводника Anfall Общие вопросы Delphi 22 01.03.2012 20:50
Открыть несколько файлов royun Общие вопросы Delphi 2 14.11.2011 08:02
1) как перетащить несколько модулей с одной книги на другую одним скопом? 2)можно ли открыть несколько книг сразу? БАХТИ Microsoft Office Excel 17 26.09.2011 18:11
Печатать репорт в несколько экземпляров chugo Microsoft Office Access 1 27.09.2010 06:27