Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
#1

Нужно чтобы в потоке не было обращения к визуальным компонентам

18.08.2014, 21:43. Просмотров 896. Ответов 21
Метки нет (Все метки)

Ребят выполнить вот это действие в потоке

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    s:string;
begin
for i:=0 to Memo1.Lines.Count-1 do
 begin
  s:=Memo1.Lines[i];
  delete(s,pos('@',s),pos(':',s)-pos('@',s));
  Memo1.Lines[i]:=s
 end;
end;
end;
!!! Ребят исправте ошибки! Мне нужно чтобы в потоке не было обращения к визуальным компонентам(Чтобы увеличить скорость) Тоисть нужно загрузить это наверно в какуюто переменную) В общем ребят пожалуйста! Заранее спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2014, 21:43
Ответы с готовыми решениями:

Задача о 8 ферзях. Нужно, чтобы было 2 поля для построения фигур
Друзья программисты,есть у кого ни будь задача о 8 ферзях на делфи?Но задача не простая,надо что...

Нужно ли синхронизировать доступ к визуальным vcl без модификации?
Нужно ли синхронизировать доступ к визуальным компонентам на форме из потока, если их свойства я не...

Как сделать чтобы по нажатию кнопки запускался exe файл, но путь прописывать к нему не нужно было бы.
Как сделать чтобы по нажатию кнопки запускался exe файл, но путь прописывать к нему не нужно было...

Как сделать, чтобы процедура имела доступ к компонентам?
Создал процедуру после {$R *.dfm}Всё работает, но когда пишу в ней код edit1.text:='привет'; то...

Не могу создать поток( Нужно чтобы функция запускается в потоке и работала там пока не закроем в потоке)
хм.. не могу создать поток в c++ и направить туда. Нужно чтобы функция запускается в потоке и...

21
Сиськохват
Заблокирован
18.08.2014, 21:47 #2
Вместо memo, stringlist используй он такой же ток не визуальный
0
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
18.08.2014, 21:51  [ТС] #3
Можешь в коде показать?
Просто пока ещё 0 я а тут такое задание дали) Плиз покажи как
0
Сиськохват
Заблокирован
18.08.2014, 21:57 #4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    s:string;
  sl: TStringList;
begin
sl := TStringList.Create;
sl.LoadFromFile('file');
for i:=0 to sl.Lines.Count-1 do
 begin
  s:=sl.Lines[i];
  delete(s,pos('@',s),pos(':',s)-pos('@',s));
  sl.Lines[i]:=s;
  Application.ProcessMessage;
 end;
memo1.text := sl.text;
sl.free;
 
end;
end;
ну чот типо того
0
cotseec
18.08.2014, 22:01
  #5

Не по теме:

Цитата Сообщение от Tech66 Посмотреть сообщение
а тут такое задание дали)
интереса для: а где именно такие задания дают?
Удалить домайны в Memo приведенный код ведь из вашей темы.....

0
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
18.08.2014, 22:02  [ТС] #6
for i:=0 to sl.Lines.Count-1 do
как в sl загржаються строки) я хз но у меня еоорр

Добавлено через 1 минуту
Работа с базой майлов нужно лично мне .
0
Сиськохват
Заблокирован
18.08.2014, 22:04 #7
Цитата Сообщение от Tech66 Посмотреть сообщение
как в sl загржаються строки) я хз но у меня еоорр
Delphi
1
sl.LoadFromFile('путь к файлу со строками');
или ты их вручную в мемо вбиваешь?
0
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
18.08.2014, 22:17  [ТС] #8
А можно сделать чтоб и файла в формате txt брало?

Добавлено через 11 минут
Не получаеться( одни еоры
0
Сиськохват
Заблокирован
18.08.2014, 22:18 #9
Думаю можно, но пока не знаю как, если узнаешь, отпишись обязательно)))
1
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
18.08.2014, 22:22  [ТС] #10
Ок) Но то что кинул там чтото ерит с lines
0
Сиськохват
Заблокирован
18.08.2014, 22:25 #11
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var i:integer;
    s:string;
  sl: TStringList;
begin
sl := TStringList.Create;
sl.LoadFromFile('file');
for i:=0 to sl.Count-1 do
 begin
  s:=sl.Strings[i];
  delete(s,pos('@',s),pos(':',s)-pos('@',s));
  sl.Strings[i]:=s;
  Application.ProcessMessages;
 end;
memo1.text := sl.text;
sl.free;
 
end;
0
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
18.08.2014, 22:39  [ТС] #12
Count расчет же вроде)
Кароч нажимаю процесс не идёт лан может кто напишет ещё если что напишу те

Добавлено через 1 минуту
Вот кароч весь код
Посмотри может я че не так делаю

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
unit Unit12;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, sGauge, Vcl.StdCtrls, sButton,
  sGroupBox, sMemo, sDialogs;
 
type
  TForm12 = class(TForm)
    sMemo1: TsMemo;
    sGroupBox1: TsGroupBox;
    sButton1: TsButton;
    sButton2: TsButton;
    sGauge1: TsGauge;
    sButton3: TsButton;
    sOpenDialog1: TsOpenDialog;
    sSaveDialog1: TsSaveDialog;
    procedure sButton1Click(Sender: TObject);
    procedure sButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
      TNewThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;
 
var
  Form12: TForm12;
 
implementation
 
{$R *.dfm}
 
procedure TForm12.sButton1Click(Sender: TObject);
begin
if sopendialog1.Execute=true then
smemo1.Lines.LoadFromFile(sopendialog1.FileName);
 
end;
 
procedure TForm12.sButton2Click(Sender: TObject);
var
  NewThread: TNewThread;
begin
  NewThread:=TNewThread.Create(true);
  NewThread.FreeOnTerminate:=true;
  NewThread.Priority:=tpTimeCritical;
  NewThread.Resume;
end;
 
 
procedure tnewthread.Execute;
var i:integer;
    s:string;
  sl: TStringList;
begin
sl := TStringList.Create;
sl.LoadFromFile('file');
for i:=0 to sl.Count-1 do
 begin
  s:=sl.Strings[i];
  delete(s,pos('@',s),pos(':',s)-pos('@',s));
  sl.Strings[i]:=s;
  Application.ProcessMessages;
 end;
smemo1.text := sl.text;
sl.free;
end;
 
end.
0
Сиськохват
Заблокирован
18.08.2014, 23:01 #13
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
unit Unit12;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, sGauge, Vcl.StdCtrls, sButton,
  sGroupBox, sMemo, sDialogs;
 
type
  TForm12 = class(TForm)
    sMemo1: TsMemo;
    sGroupBox1: TsGroupBox;
    sButton1: TsButton;
    sButton2: TsButton;
    sGauge1: TsGauge;
    sButton3: TsButton;
    sOpenDialog1: TsOpenDialog;
    sSaveDialog1: TsSaveDialog;
    procedure sButton1Click(Sender: TObject);
    procedure sButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
  TNewThread = class(TThread)
    sl:TStringList;
    path:String;
    procedure Execute; override;
    procedure Synx;
  end;
 
var
  Form12: TForm12;
 
implementation
 
{$R *.dfm}
 
procedure TForm12.sButton2Click(Sender: TObject);
var
  NewThread: TNewThread;
begin
  if not sopendialog1.Execute then Exit
  NewThread:=TNewThread.Create(true);
  NewThread.path := sopendialog1.FileName;
  NewThread.Resume;
end;
 
procedure tnewthread.Execute;
var i:integer;
    s:string;
begin
sl := TStringList.Create;
sl.LoadFromFile(path);
for i:=0 to sl.Count-1 do
 begin
  s:=sl.Strings[i];
  delete(s,pos('@',s),pos(':',s)-pos('@',s));
  sl.Strings[i]:=s;
 end;
 Synchronize(Synx);
sl.free;
end;
 
procedure tnewthread.Synx;
begin
  Form12.smemo1.text := sl.text;
end;
 
end.
1
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
18.08.2014, 23:13  [ТС] #14
Cпасибище огромное) Всё работает на ура)
И последнее можно как нибудь сделать чтоб разделитель автоматически определялся а то у меня работает только с : а хотелось чтобы и с ;
0
Сиськохват
Заблокирован
18.08.2014, 23:29 #15
какие разделители?
0
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
18.08.2014, 23:48  [ТС] #16
например я загружаю базу емайлов с разделителем : (ыдыдд@mail.ru:1234) с этим разделителем все нормально работает а вот если я загружаю с разделителем ; то программа бездействует! как сделать чтобы программа работала с этими двумя разделителями
0
Сиськохват
Заблокирован
19.08.2014, 00:15 #17
Лучший ответ Сообщение было отмечено Tech66 как решение

Решение

Delphi
1
2
if Pos(':',s) <> 0 then delete(s,pos('@',s),pos(':',s)-pos('@',s))
  else delete(s,pos('@',s),pos(';',s)-pos('@',s));
1
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
19.08.2014, 08:32  [ТС] #18
спасибо большое

Добавлено через 1 час 14 минут
Всё норм) Только блин дублей много в тексте!
Можно по такомуже принципу удалить дубликаты ? чтобы тоже без взаимодействия с визуальными компонентами
а так всё супер
0
Puporev
Модератор
54389 / 41970 / 28988
Регистрация: 18.05.2008
Сообщений: 98,867
19.08.2014, 10:02 #19
Лучший ответ Сообщение было отмечено Tech66 как решение

Решение

Удалить дубликаты
Delphi
1
2
3
4
t:=TStringlist.Create;//создали лист
t.LoadFromFile(FileName);//загрузили текст
for i:=t.Count-1 downto 1 do
if t.IndexOf(t[i])<i then t.Delete(i);//удалили дубликаты
2
Tech66
2 / 2 / 1
Регистрация: 18.08.2014
Сообщений: 35
19.08.2014, 10:45  [ТС] #20
Спасибо работает отлично!

Добавлено через 22 минуты
Ребят не поможите с функцией парсинга!
Мне нужно взять прокси с сайта
Всё вроде бы норм!
Но берет не со всех
И почему то берет только 1 старицу а мне нужно взять со всех
Вот сам код
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
unit Unit4;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, sMemo, sButton, sEdit, regexpr,
  sLabel,  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, sDialogs, Vcl.ComCtrls, acProgressBar, sGauge;
 
type
  TForm4 = class(TForm)
    sLabel1: TsLabel;
    sEdit1: TsEdit;
    sButton1: TsButton;
    IdHTTP1: TIdHTTP;
    sButton2: TsButton;
    sButton3: TsButton;
    sLabel2: TsLabel;
    sSaveDialog1: TsSaveDialog;
    sLabel3: TsLabel;
    sLabel4: TsLabel;
    sMemo1: TsMemo;
    sGauge1: TsGauge;
    procedure sButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure sButton2Click(Sender: TObject);
    procedure sButton3Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
    TNewThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;
 
var
  Form4: TForm4;
  newthread:tnewthread;
 
implementation
 
{$R *.dfm}
procedure TForm4.FormCreate(Sender: TObject);
begin
ssaveDialog1.DefaultExt := 'txt';
end;
 
procedure TForm4.sButton1Click(Sender: TObject);
var
  NewThread: TNewThread;
begin
  NewThread:=TNewThread.Create(true);
  NewThread.FreeOnTerminate:=true;
  NewThread.Priority:=tpTimeCritical;
  NewThread.Resume;
end;
procedure TForm4.sButton2Click(Sender: TObject);
begin
if ssavedialog1.Execute=true then
smemo1.Lines.SaveToFile(ssavedialog1.FileName);
end;
 
procedure TForm4.sButton3Click(Sender: TObject);
begin
smemo1.Clear;
form4.sLabel4.Caption:='Ожидание';
form4.sGauge1.Progress:=0;
slabel2.Caption:='Получено: ' + inttostr(smemo1.Lines.Count);
end;
 
procedure tnewthread.Execute;
var
reg:TRegExpr;
link:string;
prx:tstringlist;
i:integer;
begin
form4.smemo1.clear;
form4.slabel4.Caption:='Парсим';//озражение
Form4.sGauge1.Progress:=0;
form4.sLabel4.Caption:='Ожидание';
form4.slabel2.Caption:='Получено: 0';//Возвращаем счетчику кол-ва проксей результат:
form4.slabel4.Caption:='Парсим';
prx:=tstringlist.Create; //Создаем Tstringlist для сохранение проксей и вывода их в софте!
reg:=Tregexpr.Create;  //Создаем регулярное выражение
reg.Expression:='\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}'; //Сама регулярка для парсинга проксей
link:=Form4.IdHTTP1.Get(form4.sEdit1.Text); //Берем сайт из sEdit1
Form4.sGauge1.Progress:=Form4.sGauge1.Progress+50;
form4.sLabel4.Caption:='Собираем Результат';
if reg.Exec(link)then repeat   //Забираем рузльтат по Get запросу(link) выше!
prx.Add(reg.Match[0]); //Добавляем результат
until
not
reg.ExecNext; // готово!
form4.sMemo1.Lines.Text:=prx.Text; //Выводим результат в sMemo1
Form4.sGauge1.Progress:=Form4.sGauge1.Progress+50;
form4.sLabel2.Caption:='Получено: ' + inttostr(form4.smemo1.lines.count);
form4.sLabel4.Caption:='Готово';
 
end;
end.
0
19.08.2014, 10:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 10:45

Что нужно изменить, чтобы процедура запускалась с параметрами в новом потоке?
Ошибка на 10 строке: Ожидалась функция, встречена процедура ADD Что нужно изменить, что бы...

Кривая Безье: нужно, чтобы было не 4 точки а 7
нужно переделать чтобы было не 4 точки а 7, не могу не как переделать, помогите пожалуйста using...

Нужно чтобы между рисунками не было свободного пространства
Есть таблица: &lt;table cellspacing=0 cellpadding=0&gt; &lt;tr&gt; &lt;td height='35' colspan='2'&gt; &lt;img1&gt;...


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

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

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