2pick, немного не догоняю, что ты конкретно хочешь, но все таки возможные вариации: Code: type MY_TYPE = ( item_1 = $02, item_2, item_3, item_4 = $7F); // или можно не указывать конкретные значения MY_TYPE = (item_1, item_2, item_3, item_4); другой вариант Code: const count = 2; MY_CONST: array[0..count - 1] of record id: Integer; ch: Char; end = ( (id: 0; ch: 'A'), (id: 2; ch: 'B'));
Парни, помогите пожалуйста добить многопоточность. Вот код: Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls, ComCtrls, Gauges, SyncObjs; type TForm1 = class(TForm) Edit1: TEdit; UpDown1: TUpDown; Button1: TButton; Label1: TLabel; Label2: TLabel; OpenDialog1: TOpenDialog; GoodLabel: TLabel; BadLabel: TLabel; IdHTTP1: TIdHTTP; Gauge1: TGauge; Button2: TButton; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; StaticText1: TStaticText; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TNewThread = class(TThread) private FAcc : string; FPas : string; Rez : Integer; protected procedure Execute; override; public constructor Create(CreateSuspended: Boolean); end; var Form1: TForm1; Accounts:Tstringlist; Thread, Acc:integer; Work:boolean; CS:TcriticalSection; GoodFile, BadFile: textfile; implementation {$R *.dfm} constructor TNewThread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); end; procedure TForm1.Button1Click(Sender: TObject); begin OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName); if OpenDialog1.Execute then begin Accounts.Clear; Accounts.LoadFromFile(OpenDialog1.FileName); end; end; procedure TForm1.Button2Click(Sender: TObject); begin Gauge1.MaxValue:=Memo1.Lines.Count; Gauge1.Progress:=0; Acc:=-1; Work:=true; for Thread:=1 to strtoint(Edit1.Text) do TNewThread.Create(false); Thread:=strtoint(Edit1.Text); end; procedure TNewThread.Execute; var CurAcc,i:integer; Data:TStringList; StrPage,sw,dw,rw,fw:string; begin while Work do begin CS.Enter; Inc(Acc); if Acc<Form1.Memo1.Lines.Count then CurAcc:=Acc else Work:=false; CS.Leave; if Work then begin Form1.idhttp1.HandleRedirects:=true; sw:=Form1.Edit7.Text; Data:=TstringList.Create; Data.Add('login=51745'); Data.Add('pass=8e9N3h9a7x3b'); StrPage:=Form1.idhttp1.Post(sw, Data); //Конец авторизации //Смена емалов со списка i:=0; dw:=Form1.Edit8.Text; Data:=TstringList.Create; Data.Add('time_zone=1'); Data.Add('reports=0'); Data.Add('news=1'); Data.Add('digest=1'); Data.Add('limit=20'); Data.Add('test_email='+Form1.Memo1.Lines[i+1]); Data.Add('report_email='); Data.Add('test_from_name=ВКонтакте.ру'); Data.Add('test_from_email='+Form1.Edit2.Text); Data.Add('extra_from_name=ВКонтакте.ру'); Data.Add('[email protected]'); Data.Add('country=2'); Data.Add('city=Forest'); Data.Add('addr=Forest'); Data.Add('phone=+375299791228'); Data.Add('apeal_m=gdfgd'); Data.Add('apeal_w=gfd'); Data.Add('apeal_u=fdg'); StrPage:=Form1.idhttp1.Post(dw, Data); //Конец смены емайлов со списка rw:=Form1.Edit9.Text; Data:=TStringList.Create; with Data do begin Add('num=1'); Add('list_name=text'); Add('author_name='+UTF8Encode(Form1.Edit1.Text)); Add('send=1'); Add('act=mail'); Add('subject='+UTF8Encode(Form1.Edit4.Text)); Add('priority=3'); Add('body='+UTF8Encode(Form1.Edit3.Text)); Add('day=0'); Add('h=0'); Add('min=0'); Add('templates=0'); Form1.StaticText1.Caption:=IntToStr(i); i:=i+1; end; try StrPage:=Form1.idhttp1.Post(rw, Data); Rez:=-1; except Rez:=1; end; Data.Free; end; end; dec(Thread); if Thread=0 then ShowMessage('OK'); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Accounts.Free; CS.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin Accounts:=Tstringlist.create; CS:=TcriticalSection.create; end; end. Проблема в том, что один запрос работает, а когда сделал вот так многопоточность, не хочет запрос выполнятся. Помогите пожалуйста что я не атк напортачил?
по полкам разложу: нужно в массиве привести соответствия кнопарям VK_0 и т.п., т.е. Arr['A']:=VK_A, Arr['0']:=VK_0 Чтоб не грузить через процедуры и т.п. - делаю это в константе, отсюда - в индексы массива нужно задать конкретные значения: '0'..'9', 'A'..'Z', 'F1'..'F12' Не буду вдаваться в подробности для чего надо... но надо. дальнейшие запросы для данного массива будут в таком виде Knopka:=Arr[Text]; В пхп все просто делается... в дельфе никак не могу вспомнить как объеденить диапазоны индексов.
idhttp1 расчитана в данном случае на 1 поток, т.е. твоя хттп индюшка захлебывается в собственных соплях... еще и куча урдалаков льет сопли на нее... она просто утонула . тебе нужно для каждого потока свой idhttp, но это извращение... у тебя ресурсы системы этот инди жрать будет будь здоров... пиши на winsock +индейка лежит в классе формы, а значит обращаться к ней надо на "вы" ... т.е. через класс формы Form1.IdHTTP1
массив определяется как: Code: type Name = array[Ordinal..Ordinal] of Base type; то есть нельзя в качестве индекса указывать строку, чем будет являться 'F12', должно быть число
Посылаю запрос к серверу и получаю в ответ html страницу. В этой странице около 500 строк. Задача достать из этой страницы значение 1019066 которое находиться между ser_info_add_chrs?uid=1019066&IconsP
Вам не кажется что регулярки данного типа не подходят для Delphi? ) В общем вот такую функцию сделала и все ровно. PHP: function parse_html(text_for_parse,str_open_parse,str_cancel_parse:string):string; var position:Integer; begin position:=AnsiPos(str_open_parse,text_for_parse); delete(text_for_parse,1,position+Length(str_open_parse)-1); position:=AnsiPos(str_cancel_parse,text_for_parse); Delete(text_for_parse,position,Length(text_for_parse)); Result:=text_for_parse; end;
тебе не кажется, что есть модули для делфи, которые позволяют юзать такие регулярки. есть очень классная библа...не помню линка на нее.
Code: uses ......, RegExpr; .... var r: TRegExpr; .... r := TRegEpr.Create; r.Expression := '<a href="(.*?)">(.*?)</a>'; if r.Exec(InputString) then repeat ShowMessage('link: ' + r.Match[1] + #13#10 + 'text: ' + r.Match[2]); until not r.ExecNext; r.Free; ...... Как-то так.. Библиотека RegExpr - http://regexpstudio.com/ru/TRegExpr/TRegExpr.html
Сделал чтобы для каждого потока создавался свой idhttp. Но при компиляции выдает такую ошибку Not enough actual parameters на строке HTTP:=TIdHTTP.create; Подскажи пожалуйста как исправить? Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls, ComCtrls, Gauges, SyncObjs; type TForm1 = class(TForm) Edit1: TEdit; UpDown1: TUpDown; Button1: TButton; Label1: TLabel; Label2: TLabel; OpenDialog1: TOpenDialog; GoodLabel: TLabel; BadLabel: TLabel; IdHTTP1: TIdHTTP; Gauge1: TGauge; Button2: TButton; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TNewThread = class(TThread) private FAcc : string; FPas : string; Rez : Integer; protected procedure Execute; override; public constructor Create(CreateSuspended: Boolean); end; var Form1: TForm1; Accounts:Tstringlist; Thread, Acc:integer; Work:boolean; CS:TcriticalSection; GoodFile, BadFile: textfile; implementation {$R *.dfm} constructor TNewThread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); end; procedure TForm1.Button1Click(Sender: TObject); begin OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName); if OpenDialog1.Execute then begin Accounts.Clear; Accounts.LoadFromFile(OpenDialog1.FileName); end; end; procedure TForm1.Button2Click(Sender: TObject); begin Gauge1.MaxValue:=Memo1.Lines.Count; Gauge1.Progress:=0; Acc:=-1; Work:=true; for Thread:=1 to strtoint(Edit1.Text) do TNewThread.Create(false); Thread:=strtoint(Edit1.Text); end; procedure TNewThread.Execute; var CurAcc,i:integer; Data:TStringList; StrPage,sw,dw,rw,fw:string; HTTP: TIdHTTP; begin while Work do begin if Work then begin sw:=Form1.Edit7.Text; Data:=TstringList.Create; Data.Add('login=51745'); Data.Add('pass=8e9N3h9a7x3b'); HTTP:=TIdHTTP.create; HTTP.HandleRedirects:=false; try HTTP.Post(sw, data); except ShowMessage('Ошибка!'); end; //Конец авторизации //Смена емалов со списка i:=0; dw:=Form1.Edit8.Text; Data:=TstringList.Create; Data.Add('time_zone=1'); Data.Add('reports=0'); Data.Add('news=1'); Data.Add('digest=1'); Data.Add('limit=20'); Data.Add('[email protected]'); Data.Add('report_email='); Data.Add('test_from_name=ВКонтакте.ру'); Data.Add('test_from_email='+Form1.Edit2.Text); Data.Add('extra_from_name=ВКонтакте.ру'); Data.Add('[email protected]'); Data.Add('country=2'); Data.Add('city=Forest'); Data.Add('addr=Forest'); Data.Add('phone=+3752954654654'); Data.Add('apeal_m=gdfgd'); Data.Add('apeal_w=gfd'); Data.Add('apeal_u=fdg'); HTTP:=TIdHTTP.create; HTTP.HandleRedirects:=false; try HTTP.Post(dw, data); except ShowMessage('Ошибка!'); end; //Конец смены емайлов со списка rw:=Form1.Edit9.Text; Data:=TStringList.Create; with Data do begin Add('num=1'); Add('list_name=text'); Add('author_name='+UTF8Encode(Form1.Edit1.Text)); Add('send=1'); Add('act=mail'); Add('subject='+UTF8Encode(Form1.Edit4.Text)); Add('priority=3'); Add('body='+UTF8Encode(Form1.Edit3.Text)); Add('day=0'); Add('h=0'); Add('min=0'); Add('templates=0'); Form1.StaticText1.Caption:=IntToStr(i); i:=i+1; HTTP:=TIdHTTP.create; HTTP.HandleRedirects:=false; end; try HTTP.Post(rw, data); Rez:=-1; except Rez:=1; end; HTTP.Free; data.Free; end; end; dec(Thread); if Thread=0 then ShowMessage('OK'); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Accounts.Free; CS.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin Accounts:=Tstringlist.create; CS:=TcriticalSection.create; end; end.
гаварю же.. можно взять только непрерівній диапазон... т. е. можеш взят A: Array [Char] = (0,0,0,0,{...,} 1,2,3,4) только тогда прийдьотся заполнить все значения (AnsiChar 256, WideChar 65536 значений) можно сократить: A: Array ['0'..Char({F12})] //...
Добрый день. Подскажите как сделать скриншот выделенной области экрана(вне формы!). В области формы это делается анализируя события OnMouseDown,OnMouseUp,OnMouseMove. А как организовать это в любой области экрана при том чтобы при выделении область выделения обводилась линией?
cardons, получай контекст десктопа, копируй нужную область через BitBlt, ну и сохраняй куда тебе надо, GetCursorPos в помощь для получения области, Rectangle для рисования прямоугольника)
вопросик возник-на диске имеется файл без расширения,программно присвоить расширение файлу и затем после нескольких операций снова его убрать.как?
стою перед выбором,посоветуйте,в программе нужно выводить текст,видео,аудио...не могу решить с типом интерфейса(ссылочный и закладочный),и куда удобнее выводить....текст можно выводить в label и делать события Click на ссылки,можно в Textbox но тогда затруднен вывод ссылок,придется делать отд. вкладки с видео и аудио,либо в html-просто с ссылками(но проблема в том что видео должно выводиться в программе)-сложность обработки события
Такая вот просьба. Посоветуйте литературы по дельфи. В своем городе хотел купить, но нигде не нашел, что искал. Хочу купить на озоне, ну или еще в каком-то крупном онлайн магазине. Обязательно наличие описания WinSock.И книга должна быть для начинающих. Чтобы только открыв книгу, на меня не посыпались непонятные термины.