Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

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

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

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

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, 22:28   #3
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,013
Репутация: 675
По умолчанию

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по использованию компонента RichEdit le7o Компоненты Delphi 5 17.11.2015 17: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 15:27
Почему у компонента TImage не работает метод Perform? devi409 Win Api 7 22.12.2008 18:51


08:05.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru