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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2016, 15:49   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос "Обёртка" массива для потока

Если переменную с каким-нибудь контролом можно обернуть для тела потока так
Код:
unit frm_Main;

interface

uses
  ...

type
  TFormMain = class(TForm)
    ...
    Button1: TButton;
  private
    { Private declarations }
    ...
  public
    { Public declarations }
    NotResponding: String;
  end;

type
  TMy_Thread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure SyncProc;
  public
    GoButton: TButton;
    property NotResponding: String read FNotResponding;
  end;

  My_Thread := TMy_Thread.Create(True);
  My_Thread.GoButtonn := Button1; // Наша кнопка
  My_Thread.FNotResponding := NotResponding; // Переменная типа String
  My_Thread.FreeOnTerminate := True;
  My_Thread.Resume;
то как это сделать с массивом?
Код:
type
  TMyArray = Record
    FName: String;
    URL: String;
  end;

var
  FormMain: TFormMain;
  MyArray: Array of TMyArray;
Shouldercannon вне форума Ответить с цитированием
Старый 03.10.2016, 16:06   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Это не обёртка, для приличия надо сокрытие применить.
Динамический массив это тоже указатель, работа не отличается от работы со строкой.

Код:
type
  TMyElement = Record
    FName: String;
    URL: String;
  end;
TMyArray=Array of TMyElement;
var
  FormMain: TFormMain;
  MyArray: TMyArray;


type
  TMy_Thread = class(TThread)
  private
    { Private declarations }
    fMyArray:TMyArray;
  protected
    procedure Execute; override;
    procedure SyncProc;
    procedure SetMyArray(const Value:TMyArray);
  public
    GoButton: TButton;
    property NotResponding: String read FNotResponding;
    propery  MyArray:TMyArray read fMyArray write SetMyArray;
  
procedure TMy_Thread.SetMyArray(const value:TMyArray);
begin
fMyArray:=Value;  // В данном коде присваивается ссылка, счётчик увеличивается.
end;

My_Thread.MyArray:=MyArray; // Присваиваем глобальный массив классу-потока.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 03:20