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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2018, 21:20   #1
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
По умолчанию Почему поток не видеть компонента RichEdit-а?

Здравствуйте дорогие друзья. Скажите пожалуйста, в чем тут проблема? Почему поток не распознаёт компонента?
Изображения
Тип файла: png Поток.PNG (18.0 Кб, 64 просмотров)
Моя родина там, где мой компьютер

Последний раз редактировалось SASFM; 03.01.2018 в 21:23.
SASFM вне форума Ответить с цитированием
Старый 03.01.2018, 21:24   #2
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
По умолчанию

А вот полный код программы:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyTread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;
var
  Form1: TForm1;
  sas: TMyTread;
implementation

{$R *.dfm}

{ TMyTread }

procedure TMyTread.Execute;
begin
  inherited;
  Richedit1.Clear;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  sas:=TMyTread.Create(FALSE);
end;

end.
Моя родина там, где мой компьютер
SASFM вне форума Ответить с цитированием
Старый 03.01.2018, 21:28   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

1) А почему он должен видеть? Два разных класса и не должны видеть внутренние поля друг друга. Если уж очень надо, можно достучаться через глобальную переменную: Form1.Richedit1

2) Но во всех мануалах написано, что из потока нельзя обращаться к компонентам VCL напрямую. Только через Synchronize
Black Fregat вне форума Ответить с цитированием
Старый 03.01.2018, 21:32   #4
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
2) Но во всех мануалах написано, что из потока нельзя обращаться к компонентам VCL напрямую. Только через Synchronize
Black Fregat, Спасибо за ответ. А можете по подробнее пожалуйста. В потоках я чайник. За ранее спасибо.
Моя родина там, где мой компьютер
SASFM вне форума Ответить с цитированием
Старый 03.01.2018, 22:10   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Например, http://www.delphi-manual.ru/synchronize.php
Цитата:
При использовании в приложении нескольких потоков необходимо гарантировать, что в данный момент только один из потоков может иметь доступ к свойствам и методам объекта VCL - визуального компонента Delphi, то есть действия потоков необходимо синхронизировать между собой. Для выполнения такой синхронизации в Delphi применяется специальный метод Synchronize, в рамках которого и нужно вызывать процедуры, модифицирующие свойства визуальных компонентов.
Общий смысл в том, что VCL не является потоко-безопасным
Black Fregat вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по использованию компонента RichEdit le7o Компоненты Delphi 5 17.11.2015 16:40
Почему зависает поток? UKRtortik Общие вопросы Delphi 4 23.03.2014 21:16
почему не выделяется текст в RichEdit? kaizer131 Общие вопросы Delphi 5 12.04.2010 15:23
Почему не вводит в поток??? girkoff Общие вопросы C/C++ 1 07.11.2009 14:27
Почему у компонента TImage не работает метод Perform? devi409 Win Api 7 22.12.2008 17:51