В общем второй раз уже так. К примеру есть код: Code: http.HTTPMethod('GET','http://ya.ru/'); form1.Memo1.Text:=http.Text(http.Document); но ничего нету - вообще нету. Но если я ставлю брэкпоинты и даю программе работать по нажатию F9 то все хорошо. + сейчас появилось такое. Что к примеру по нажатию копки запускается потом который к примеру в memo1 выводит числа от 1 до 1000 - и стоит только курсор сдвинуть на саму форму за пределы границ формы, то сразу ошибка про канвас появляется.
Нет =-) Помнится у меня что-то было с канвасом связано, только не могу вспомнить в каком контесте. Давай, Какеола, проспись, протрезвей и перепиши 1-й пост подробнее и внятнее)))
=) еще раз повторяю: программа не может получить данные из интернета ( код страницы ) если просто нажать F9. Но если на строках получения текста страницы ыставлю брэкпоинты - программа получает данные из интернета.
У тебя этот код выполняеться случайно не в дополнительном, созданном тобой потоке, или же все таки в главном?
Какеола, какеола ака какашкин. Говнокодер ты да к тому же ленивый. Я ведь тебе уже писал: http://forum.antichat.ru/showpost.php?p=2675393&postcount=8 И даже говорил, что с визуальными компонентами из потока работать можно только через synchronize!!!!!!!!!!!! И где-то в той же теме я распинался на счет sendmessage и postmessage. А толку че-то не вижу...
Code: http.HTTPMethod('GET','http://ya.ru/'); Synchronize(procedure begin form1.Memo1.Text:=http.Text(http.Document); end);
ага, спасибо за теплые слова - а что если я запускаю 1 поток ? И я писал вот так: Code: procedure TNewThread.Execute; begin form1.Memo1.Lines.Add('1'); end; и все равно вываливается эта ошибка ? вот незадача то... 2xophet сам редиска немытая и пережованная
ты запускаешь 1 ДОПОЛНИТЕЛЬНЫЙ поток, а с визуальными компонентами можно работать только из ОСНОВНОГО потока. читай статью с винграда. Я думаю тему можно закрыть т.к. проблема решена и дабы не разводить флуд. P.S. и переименовать тему в "проблемы с головой и руками" P.P.S. ну не смог удержаться и не потролить слегка
да епт, с визуальными компонентами можно работать если 1 поток, если 2 уже синхронайз. я даже в поток пишу http.httpmethod('get','http://ya.ru/); все равно вылетает ошибка
к контролу можно обращаться только из потока-родителя. поток родитель создается при запуске программы. Ты мне кажется этого не понимаешь.
мда млять - у вас голова есть. Вот кусок кода моей программы которая компилируется и работает: Code: procedure TNewThread.Execute; var i,o,p,c:integer;s:string; begin for i:=strtoint(Form1.Edit1.Text) to strtoint(form1.edit2.text) do begin form1.StatusBar1.Panels.Items[0].Text:='Страница:'+inttostr(i); http.HTTPMethod('GET','link+inttostr(i)); s:=http.Text(http.Document); [code] спокойно работает - т.к. однопоточная.Сую это-же к себе в программу - ошибка вываливается. Получается что с той программой баг раз она компилируется и работает чтоли
kakeolala блин, тебя уже 5 раз прямым текстом послали... читать литературу. как же тебя надо послать, чтобы ты пошел? Следи за развитием мысли: ты запускаешь программу. появляется форма твоя. ЭТО ОСНОВНОЙ ПОТОК. С визуальными компоентами ты ДОЛЖЕН работать ТОЛЬКО из НЕГО из всех потоков, которые ты создаешь TNewThread.Execute; работать ты МОЖЕШЬ но результат будет непредскауем. Иногда выполняется прога, иногда канвас вылазит иногда компоненты ничего не отображают, вызывая метод Synchronize ты переводишь выполнение потока в контекст основного потока (в литературе встречается "поток VCL") и можешь работать с ВИЗУАЛЬНЫМИ компонетами формы. ВСЕ, обьяснил для дегенератов еще раз че-то высрешь тут, а тем более с намеком "вы все тупые, один я умный" будешь мной слаться нах, а не на винград. я думаю народ присоединиься.
Нет, прога не однопоточная. Даже по этому видно: что код будет выполняться в новом потоке. Ошибки с канвой и т. д. не всегда возникают, когда ты работаешь с GUI из дополнительного потока и не используешь метод Synchronize. Но если ты все таки не используешь его, то самые разнообразные ошибки могут появиться в любой самый неожиданный момент.
2xophet я те 3 раза писал - мудак чтоли. Ну смотри кусок кода: Code: TNewThread = class(TThread) private { Private declarations } protected procedure Execute; override; end; var Form1: TForm1; reg:TRegExpr; http:thttpsend; list,list1:tstringlist; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin http:=thttpsend.Create; end; procedure TNewThread.Execute; begin http.httpmethod('GET','http://ya.ru'); end; procedure TForm1.Button1Click(Sender: TObject); var NewThread: TNewThread; begin NewThread:=TNewThread.Create(true); NewThread.FreeOnTerminate:=true; NewThread.Priority:=tpLower; NewThread.Resume; end; end. куда мне синхройз по твоему написать ? в http чтоли
пиздец ТС неадекват, ему объясняют, он быдлит. 1. TNewThread = class(TThread) - что это блять? 2. Туда и sync 3. sync вызывается внутри класса понятно?!?! еще раз блять, нельзя обращаться к контролам из другого потока, не хочешь слушать? твои проблемы.
Ладно хорошо. В этом коде тоже такая же ошибка. куда тут синхронайз ? Code: procedure TNewThread.Execute; begin http.httpmethod('GET','http://ya.ru'); end; procedure TForm1.Button1Click(Sender: TObject); var NewThread: TNewThread; begin NewThread:=TNewThread.Create(true); NewThread.FreeOnTerminate:=true; NewThread.Priority:=tpLower; NewThread.Resume; end;