работает 100%. Code: program Project1; uses windows,wininet,sysutils; type TArray = array of string; function explode(cDelimiter, sValue : string; iCount : integer) : TArray; var s : string; i,p : integer; begin s := sValue; i := 0; while length(s) > 0 do begin inc(i); SetLength(result, i); p := pos(cDelimiter,s); if ( p > 0 ) and ( ( i < iCount ) OR ( iCount = 0) ) then begin result[i - 1] := copy(s,0,p-1); {updated, thanks Irfan} s := copy(s,p + length(cDelimiter),length(s)); end else begin result[i - 1] := s; s := ''; end; end; end; function DownloadURL_NOCache(const aUrl: string; var s: String): Boolean; var hSession: HINTERNET; hService: HINTERNET; lpBuffer: array[0..1024 + 1] of Char; dwBytesRead: DWORD; begin Result := False; s := ''; hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try if Assigned(hSession) then begin hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0); if Assigned(hService) then try while True do begin dwBytesRead := 1024; InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead); if dwBytesRead = 0 then break; lpBuffer[dwBytesRead] := #0; s := s + lpBuffer; end; Result := True; finally InternetCloseHandle(hService); end; end; finally InternetCloseHandle(hSession); end; end; var s,host:string; a4 : integer; a:TArray; begin //1) Есть фаил на хосте (*.txt) (Адрес: http://host.domen/1.txt) host := 'http://host.domen/1.txt'; //б) Открыть этот фаил не сохраняя на компе DownloadURL_NOCache(host,s); //Если фаил есть на хосте то: переменая4 = 1 //Если нет то: переменая4 = 0 a4:=1; if (length(s)=0) then a4:=0; //1 строчка = переменая1 //2 строчка = переменая2 //3 строчка = переменая3 a:= explode(#13#10,s, 0) ; //1 строчка = a[0] //2 строчка = a[1] //3 строчка = a[2] //n строчка = a[n-1] messagebox(0,pchar(a[0]),pchar(a[1]),0); end.
с urlmon как-бы вобще легче ) Надо было на WinSock тогда что-ли) winsock работает на уровне raw-сокетов, wininet что-то типа обложки для winsock, а urlmon оболочка для wininet
Как в дельфи нажать на кнопку пуск, потом - "Вверх", т.е. VK_UP. Так не получается: Code: taskbar:=FindWindow('Shell_TrayWnd',nil); winkey := FindWindowEx(taskbar, 0, 'Button', nil); SendMessage(winkey, WM_LBUTTONDOWN, 0,0); SendMessage(winkey, WM_KEYDOWN, VK_UP, 0); Чувствую, что надо найти дескриптор пуска, а потом уже ему отсылать комманду, но я хз что за дескриптор в этого окна.
Бог с ним, с тем пуском. Есть другой вопрос: есть переменная вида string, которая определяется в процедуре. Её надо вывести в дргой процедуре. Как?
1) Обьяви ее в классе, тогда получишь доступ со всех методов класса. 2) Передавай эту переменную как параметр второй процедуре.
Это несомненно так. Но переменная же может быть глобальной относительно определенной области видимости, но не всей программы ) Тем более я написал это просто как еще один вариант, не подразумевая, что он лучше предыдущих двух.
есть длл. длл загружается и запускает поток. этот поток использует глобальный массив. дак вот он его использует всё хорошо работает. дописываю строчку кода и этот массив становится недоступен. похоже это как то связано с размером процедуры потока. проблемму впринципе решил но интерестно в чом прикол был.
IdSMTP(IOHandler) -> IdIOHandlerSocket(SocksInfo) -> IdSocksInfo Как понятно из названия держит только Socks4/5 прокси
Знаю уже юзал пробовал только проблема IdSocksInfo там есть графа где нужно дать компоненту понять какой сокс 5й или 4й.. Икак определитьпо Ипу и порту какой сокс?+ хотелось бы для уверенности увидеть код)
Чекером... типа Charon или Proxyfire А ваще зачастую прокси которые поддерживают S5 держат и S4 , так что ставь S4 и попадание будет 70-80%
Я к сожалению в потоках особо не разобрался, но могу сказать если ты писал под билдером или делфой, скорее всего это результат ошибок этих сред, ну и потом, глобальные переменные это не лучшее решение и тем более массив.
Угу... есть такая трабла на Делфи обычно спасаюсь глобальной переменной crit.. в кажом потоке: if crit then sleep(10); crit:=true; // действия с глоб массивом crit:=false;
Вообще такие вещи делаются через критические секции типа Code: var CS:TRTLCriticalSection; // глобальная переменная ....... при старте проги делаешь: InitializeCriticalSection(CS); ..... в потоках делаешь: EnterCriticalSection(CS); тут идут нужные действия. LeaveCriticalSection(CS); после выполнения EnterCriticalSection система приостанавливает все потоки программы и выполняет код который идет далее. Затем после LeaveCriticalSection система опять разрешает работу других потоков. т.е. какбы синхронизация но на уровне ядра и просчитана более лучше.
Помогите сделать считывание матрицы из текстового файла в данной программе: Code: uses crt; type PtrStr = ^Str; Str = array [1..1] of integer; PtrMatr = ^Matr; Matr = array [1..1] of PtrStr; var matrica: PtrMatr; razmer, i, j: integer; procedure CreateMatr; begin write ('razmernost matricy: '); readln(razmer); getmem(matrica, razmer*SizeOf(PtrStr)); for i:=1 to razmer do getmem(matrica^[i], razmer*SizeOf(integer)); writeln('vvodim elementy:'); for i:=1 to razmer do for j:=1 to razmer do readln(matrica^[i]^[j]); end; procedure destroymatrix; begin for i:=1 to razmer do freemem(matrica^[i], razmer*SizeOf(integer)); freemem(matrica, razmer*SizeOf(PtrStr)); end; procedure otobrajenie; begin for i:=1 to razmer do begin writeln; for j:=1 to razmer do write(matrica^[i]^[j]:5); end; writeln; end; procedure sortirovka; var buffer1, buffer2, buffer3: integer; begin buffer3:=1; for i:=1 to razmer do begin buffer1:= matrica^[i]^[1]; buffer2:= matrica^[i]^[i]; for j:=0 to razmer-1 do begin if matrica^[i]^[j+1] <= buffer1 then begin buffer3:=j+1; buffer1:=matrica^[i]^[j+1]; end; matrica^[i]^[buffer3]:=buffer2; matrica^[i]^[i]:=buffer1; end; end; end; begin clrscr; CreateMatr; otobrajenie; sortirovka; otobrajenie; destroymatrix; readln; end.
Agregat, предлагаешь тебе лабу сделать? Code: procedure CreateMatr; var F : text; begin write ('razmernost matricy: '); readln(razmer); assign(F,'README'); reset(F); читаешь пока не eof(F) и записываешь в элемент матрицы end;