Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
10 / 10 / 5
Регистрация: 30.12.2010
Сообщений: 379
1

Компоненты недоступны в процедурах

05.05.2012, 16:35. Показов 1053. Ответов 4
Метки нет (Все метки)

Здравствуйте, хотел задать такой вопрос. Сейчас работаю с потоками. Вот код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
unit Unit1;
 
interface
 
uses
  Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls,
  Menus,  SysUtils, Classes, IdIntercept, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdFTP, IdAntiFreezeBase, IdAntiFreeze, IdLogBase, IdLogDebug, IdGlobal,
  IdLogEvent, IdFTPCommon, IdFTPList, FileCtrl;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
  TNewThread = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
  end;
 
var
 
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 TNewThread.Create(false);
end;
 
procedure TNewThread.Execute;
begin
  memo1.lines.add('dsss');
end;
 
end.
Ошибка выводится на строке
Delphi
1
memo1.lines.add('dsss');
То же самое возникает когда в собственных процедурах работаю с компонентом. Подскажите пожалуйста, как это исправить?

Добавлено через 34 минуты
Еще не одного просмотра не было, а тема уже опустилась(
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2012, 16:35
Ответы с готовыми решениями:

Компоненты формы недоступны в другой форме
Компоненты формы недоступны в другой форме. В секции uses unit прописала к компонентам обращаюсь...

Visual studio 2008 Недоступны компоненты.
Вопрос по оболочке среды. У меня есть исходник чата, форма сделана через MFC компоненты. Мне нужны...

Компоненты checkBox и textBox недоступны из-за своего уровня защиты
Form2 form_attrib = new Form2(); form_attrib.fname = fileinf.FullName; ...

недоступны инфоблоки
Скачал готовый купленный сайт, установил его на стационарный компьютер. Если пользоваться сайтом ...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31090 / 20313 / 7910
Регистрация: 22.10.2011
Сообщений: 35,221
Записей в блоге: 6
05.05.2012, 16:36 2
Цитата Сообщение от Илья01 Посмотреть сообщение
Подскажите пожалуйста, как это исправить?
Form1.Memo1.Lines.Add(...)

Но так не делается. Нельзя из другого потока вот так просто обращаться к визуальным компонентам формы. Прочитай про функцию Synchronize.
1
10 / 10 / 5
Регистрация: 30.12.2010
Сообщений: 379
05.05.2012, 18:35  [ТС] 3
Все равно ошибка осталась:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
unit Unit1;
 
interface
 
uses
  Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls,
  Menus,  SysUtils, Classes, IdIntercept, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdFTP, IdAntiFreezeBase, IdAntiFreeze, IdLogBase, IdLogDebug, IdGlobal,
  IdLogEvent, IdFTPCommon, IdFTPList, FileCtrl;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
  TNewThread = class(TThread)
  private
  protected
    procedure Execute; override;
    procedure UpdateCaption;
  public
    constructor Create(CreateSuspended: Boolean);
  end;
 
var
 
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 TNewThread.Create(false);
end;
 
procedure TNewThread.UpdateCaption;
begin
  memo1.lines.add('dsss');
end;
 
procedure TNewThread.Execute;
begin
  Synchronize(UpdateCaption);
end;
 
end.
Добавлено через 11 минут
т. к. не терпится писать дальше, временно решил проблему через кое что с помощью таймера и переменной. Но тема не закрыта...

Добавлено через 23 минуты
Черт, этот способ невозможен, т. к. при нем программа работает точно так же как и без потоков, т. е. тормозит.

Добавлено через 1 час 17 минут
во втором коде не знаете, что не так?
0
3941 / 1866 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
05.05.2012, 18:47 4
Да напиши же:
Delphi
1
Form1.Memo1.Lines.Add('dsss');
тебе же уже подсказали.
1
10 / 10 / 5
Регистрация: 30.12.2010
Сообщений: 379
05.05.2012, 19:43  [ТС] 5
спасибо, ошибся
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2012, 19:43

Помощь в написании контрольных, курсовых и дипломных работ здесь.

IN в хранимых процедурах
Как избежать составлять в клиентских приложениях текстовые запросы типа string...

Переменные в процедурах
есть допустим Procedure (a,b : integer); Чтобы вызвать эту процедуру надо procedure ( и тут 2...

Записи в процедурах
Нужно составить программу из двух процедур. Первая процедура ввода в ней записываеться имя...

Файлы в процедурах
Подскажите пожалуйста, как правильно реализовать эту процедуру. robota(FILE fp; FILE fa) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.