Не надо 2 массивов если работаешь с текстом. есть варианты проще: TStringList Code: Пример кода : Использование строк название-значение var names : TStringList; // Определение нашей переменной списка строк ageStr : String; i : Integer; begin // Определение объекта списка строк, и указание нашей переменной на него names := TStringList.Create; // Теперь добавляем несколько названия в наш список names.CommaText := 'Neil=45, Brian=63, Jim=22'; // И теперь находим возраст Брайена ageStr := names.Values['Brian']; // Показ этого значения ShowMessage('Возраст Brian'а = '+ageStr); // Теперь отображаем все имена и значение возраста for i := 0 to names.Count-1 do begin ShowMessage(names.Names[i]+' - '+names.ValueFromIndex[i]); end; end; Возраст Brian'а 63 Neil - 45 Brian - 63 Jim - 22 Источник: http://delphibasics.ru/TStringList.php Самое то для таких вещей И имена можно использовать
Помогите организовать поиск program Records; uses crt, strings; const max = 100; type Ttrain = record Otpravlenie : string[40]; Pribitie : string[40]; Category : string[10]; Time : string[10]; Number : string[10]; end; Ttrains = array [1..max] of Ttrain; procedure SngWindow(x1,y1,x2,y2,tc,c : byte); begin window(x1,y1,x2,y2); textbackground(c); textcolor(tc); clrscr; end; procedure DblWindow(x1,y1,x2,y2,tcolor, c1, c2 : byte); begin window(x1,y1,x2,y2); textbackground(c1); clrscr; window(x1+1,y1+1,x2-1,y2-1); textbackground(c2); textcolor(tcolor); clrscr; end; function Menu : byte; var punkt : byte; er : integer; s : string; begin SngWindow(1,1,80,25,WHITE,BLACK); SngWindow(1,6,80,25,WHITE,BLUE); repeat DblWindow(1,1,80,5,YELLOW,MAGENTA,BLUE); writeln; write(' 1.ADD 2.DELETE 3.PRINT 4.SEARCH 5.EXIT'); readln(s); val(s,punkt,er); until (er=0) and (punkt>=1) and (punkt<=5); Menu := punkt; end; function SubMenu : byte; var punkt : byte; er : integer; s : string; begin SngWindow(1,1,80,25,WHITE,BLACK); SngWindow(1,6,80,25,WHITE,BLUE); repeat {Нарисовать окно для главного меню} DblWindow(1,1,80,5,YELLOW,MAGENTA,BLUE); writeln; write(' 1.Otpravlenie 2.Pribitie 3.Number 4.Exit'); readln(s); {ввод номера пункта меню} val(s,punkt,er); until (er=0) and (punkt>=1) and (punkt<=4); SubMenu := punkt; end; procedure AddRecord(var mas : Ttrains; var n : byte; size : byte); var s : String; er : integer; begin if (n+1 <= size) then begin inc(n); write('Otpravlenie =>'); readln(mas[n].Otpravlenie); write('Pribitie =>'); readln(mas[n].Pribitie); write('Category =>'); readln(mas[n].Category); write('Time =>'); readln(mas[n].Time); write('Number =>'); readln(mas[n].number); writeln('Книга добавлена в каталог!'); end else writeln('Недостаточно места в каталоге!'); end; procedure PrintRecord(var mas : Ttrains; i : integer); begin write(i:3); with mas do begin write(Otpravlenie:23); write(Pribitie:20); write(Category:10); write(Time:10); write(Number:12); writeln; end; end; procedure Print(var mas : Ttrains; n : integer); var i : integer; begin writeln('#':3,'Otpravlenie':23,'Pribitie':20,'Category':10,'Time':10,'Number':12); for i:=1 to n do PrintRecord(mas,i); end; procedure DelRecordByName(var mas : Ttrains; var n : byte; bname : string); var i,j : integer; {номера книг в каталоге} begin writeln('#':3,'Otpravlenie':23,'Pribitie':20,'Category':10,'Time':10,'Number':12); for i:=1 to n do begin with mas do if (Otpravlenie = otpravlenie) then begin PrintRecord(mas,i); for j:=i+1 to n do mas[j-1] := mas[j]; dec(n); end; end; end; procedure FindByname(var mas : Ttrains; n : integer; botpravlenie : string); var i : integer; begin writeln('#':3,'Otpravlenie':23,'Pribitie':20,'Category':10,'Time':10,'Number':12); for i:=1 to n do with mas do if otpravlenie=botpravlenie then PrintRecord(mas,i); end; procedure FindByauthor(var mas : Ttrains; n : integer; ba, bst : string); var i : integer; begin writeln('#':3,'Otpravlenie':23,'Pribitie':20,'Category':10,'Time':10,'Number':12); for i:=1 to n do with mas do if (pribitie=ba) and (Category=bst) then PrintRecord(mas,i); end; procedure FindByyear(var mas : Ttrains; n : integer; Number : string); var i : integer; begin writeln('#':3,'Otpravlenie':23,'Pribitie':20,'Category':10,'Time':10,'Number':12); for i:=1 to n do with mas do if number=number then PrintRecord(mas,i); end; var b : Ttrains; n : byte; punkt : byte; subpunkt : byte; trainotprav, a, st : string; y : string; s : string; er : integer; begin n := 0; SngWindow(1,1,80,25,WHITE,BLACK); repeat punkt:= Menu; case (punkt) of 1:begin SngWindow(1,6,80,25,WHITE,BLUE); writeln(' ADD train'); AddRecord(b,n,max); readkey; end; 2:begin SngWindow(1,6,80,25,WHITE,BLUE); writeln(' Delete by otpravlenie'); write('Otpravlenie =>'); readln(trainotprav); DelRecordByName(b,n,trainotprav); readkey; end; 3:begin SngWindow(1,6,80,25,WHITE,BLUE); writeln(' Catalog of trains'); Print(b,n); readkey; end; 4:begin repeat subpunkt := SubMenu; case (subpunkt) of 1:begin SngWindow(1,6,80,25,WHITE,BLUE); writeln(' Train by otpravlenie '); write('Otpravlenie =>'); readln(trainotprav); readkey; end; 2:begin SngWindow(1,6,80,25,WHITE,BLUE); writeln(' Train by pribitie and category '); write('Pribitie =>'); readln(a); write('Category =>'); readln(st); readkey; end; 3:begin SngWindow(1,6,80,25,WHITE,BLUE); writeln(' Train by number '); write('number =>'); readln(y); readkey; end; end; until (subpunkt = 4); end; end; until (punkt = 5); SngWindow(1,1,80,25,WHITE,BLACK); end. сделать поиск по станциям прибытия по станциях лтправления по времени в пути по номеру
Вообще-то, разделитель вроде как можно изменять, написано в том мане. По дефолту - да, стоит "=" Не, в том мане нет, ну вообще вот так:
вопрос: Win7 запускаем программу, имеем варнинг: Code: User Account Control Do you want to allow the following program from an unknown publisher make changes to this computer? как программно нажать "Yes"? Пробовал мышью: Code: var TI:TInput; begin TI.Itype:=0; TI.mi.dx:= 37000; TI.mi.dy:= 37000; TI.mi.mouseData:=0; TI.mi.time:=0; TI.mi.dwFlags:=MOUSEEVENTF_MOVE+MOUSEEVENTF_ABSOLUTE; SendInput(1,TI,sizeof(TI)); TI.mi.dwFlags:=MOUSEEVENTF_LEFTDOWN; SendInput(1,TI,sizeof(TI)); TI.mi.dwFlags:=MOUSEEVENTF_LEFTUP; SendInput(1,TI,sizeof(TI)); end. - под Win7 не катит. Code: SetCursorPos(500, 500); Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 500, 500, 0,0); Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 500,500,0,0) - под Win7 срабатывает, даже setpos не выполняется. Пробовал клавой: Code: procedure SetKey(Key:Integer); begin keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); end; begin SetKey(VK_LEFT); SetKey(VK_RETURN); end; - сам по себе код работает (на активном окне), но конкретно на этом варнинге - нет. Не сильно рассчитываю на ответ, но если кто-то сталкивался - скажите)
Хмм странно. Только что попробовал имитировать нажатие мыши на Win7, все получилось! Попробуй это Code: GetCursorPos(A) // узнать текущее положение мыши (где A : TPoint) SetCursorPos(X,Y) // установить новое положение мыши mouse_event(MOUSEEVENTF_LEFTDOWN,X,Y,0,0) //нажать левой кнопки mouse_event(MOUSEEVENTF_LEFTUP,X,Y,0,0) //отпустить левую кнопку P.S наверное твоя проблема в том, что ты GetCursorPos(A) упустил
По моему тут лучше через handle делать. Нагло copy/paste, автора не знаю, но исходник очень даже наплохой Code: unit UMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, ComCtrls, StdCtrls, ExtCtrls, ExtDlgs, Menus; var fmWinapi: TfmWinapi; tnCurrent: TTreeNode; SelWindow: HWND; implementation var SelDC: HDC; NewStyle: LongInt; NewExStyle: LongInt; NewClassStyle: LongInt; {$R *.dfm} function GetIcon(wnd:hwnd):TIcon; begin result:=TIcon.Create; result.Handle:=GetClassLong(wnd,GCL_HICON); end; procedure SetIcon(wnd:hwnd; icon:TIcon); begin postmessage(wnd,wm_seticon,0,icon.Handle); end; function GetText(wnd:hwnd):string; var p:array [0..256] of char; begin with fmWinAPi do GetWindowText(wnd,p,255); result:=strpas(p); end; procedure TfmWinapi.GetWindowParams(Wnd: HWND); var I, WL: LongInt; begin WL:= GetWindowLong(wnd, GWL_STYLE); for I:= 0 to lvWndStyle.Items.Count -1 do if ((LongInt(lvWndStyle.Items[i].Data)) and WL) <> 0 then lvWndStyle.Items[i].Checked:= True else lvWndStyle.Items[i].Checked:= False; WL:= GetWindowLong(wnd, GWL_EXSTYLE); for I:= 0 to lvExWndStyle.Items.Count -1 do if ((LongInt(lvExWndStyle.Items[i].Data)) and WL) <> 0 then lvExWndStyle.Items[i].Checked:= True else lvExWndStyle.Items[i].Checked:= False; WL:= GetClassLong(wnd, GCL_STYLE); for I:= 0 to lvClassStyle.Items.Count -1 do if ((LongInt(lvClassStyle.Items[i].Data)) and WL) <> 0 then lvClassStyle.Items[i].Checked:= True else lvClassStyle.Items[i].Checked:= False; end; procedure TfmWinapi.GetWindowExParams(Wnd: HWND); var PParam: array[0..127] of Char; ProcId: LongInt; hInst: THandle; Rct: TRect; begin edWText.Text:= GetText(wnd); //Caption GetClassName(wnd, PParam, 128); //Class lbWClass.caption:= StrPas(PParam); //Class lbWHandle.caption:= IntToStr(wnd); //Handle lbWHmenu.caption:=IntToStr(GetMenu(wnd));// HMenu ImWIcon.Picture.Icon:=GetIcon(wnd); GetWindowText(GetParent(wnd), PParam, 127);//Parent Text EdPWText.text:= StrPas(PParam); //Parent Text lbPWHandle.caption:= IntToStr(GetParent(wnd));//Parent Handle GetWindowRect(Wnd, Rct); edWLeft.text:= IntToStr(Rct.Left);//Left edWTop.text:= IntToStr(Rct.Top);//Top edWWidth.text:= IntToStr(Rct.Right-Rct.Left);//Width edWHeight.text:= IntToStr(Rct.Bottom-Rct.Top);//Height edWRight.text:= IntToStr(Rct.Right);//Right edWBottom.text:= IntToStr(Rct.Bottom);//Bottom lbWDC.Caption:= IntToStr(SelDC); //DC hInst:= GetWindowLong((wnd), GWL_HINSTANCE);//HInstance lbWHinst.Caption:= IntToStr(hInst); GetWindowThreadProcessId(wnd, @ProcId); lbWProcId.Caption:= IntToStr(ProcId);//ProcId end; function ChildTree(Handle: HWND; Info: Pointer): BOOL; stdcall; var Text: array [0..256] of Char; tnParent: TTreeNode; begin GetWindowText(handle, text, 200); if Text <> '' then tnParent:= fmWinapi.tvList.Items.AddChildObject(tnCurrent, StrPas(Text), TObject(Handle)) else begin GetClassName(Handle,text,255); tnParent:= fmWinapi.tvList.Items.AddChildObject(tnCurrent,text, TObject(Handle)); end; tnParent.ImageIndex:= 1; tnParent.SelectedIndex:= 1; Result:= True; end; function ParentTree(Handle: HWND; Info: Pointer): BOOL; stdcall; var Text: array [0..256] of Char; tnParent: TTreeNode; begin GetWindowText(handle, text, 200); if (Text <> '') then tnParent:= fmWinapi.tvList.Items.AddObject(nil, StrPas(Text), TObject(Handle)) else begin GetClassName(Handle,text,255); tnParent:= fmWinapi.tvList.Items.AddObject(nil, text, TObject(Handle)); end; tnParent.ImageIndex:= 0; tnParent.SelectedIndex:= 0; Result:= True; end; procedure TfmWinapi.BuildTree; var i: integer; begin tvList.Items.Clear; EnumWindows(@ParentTree, 0); for i:= 0 to tvList.Items.Count do begin tnCurrent:= tvList.Items[i]; EnumChildWindows(Integer(tvList.Items[i].Data), @ChildTree, 0); end; end; procedure TfmWinapi.FormCreate(Sender: TObject); var ListItem: TListItem; begin btnRefresh.Click; ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_POPUP'; ListItem.Data:= TObject($80000000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_CHILD'; ListItem.Data:= TObject($40000000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_MINIMIZE'; ListItem.Data:= TObject($20000000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_VISIBLE'; ListItem.Data:= TObject($10000000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_DISABLED'; ListItem.Data:= TObject($8000000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_CLIPSIBLINGS'; ListItem.Data:= TObject($4000000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_CLIPCHILDREN'; ListItem.Data:= TObject($2000000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_MAXIMIZE'; ListItem.Data:= TObject($1000000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_CAPTION'; ListItem.Data:= TObject($C00000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_BORDER'; ListItem.Data:= TObject($800000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_DLGFRAME'; ListItem.Data:= TObject($400000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_VSCROLL'; ListItem.Data:= TObject($200000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_HSCROLL'; ListItem.Data:= TObject($100000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_SYSMENU'; ListItem.Data:= TObject($80000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_THICKFRAME'; ListItem.Data:= TObject($40000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_GROUP'; ListItem.Data:= TObject($20000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_TABSTOP'; ListItem.Data:= TObject($10000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_MINIMIZEBOX'; ListItem.Data:= TObject($20000); ListItem:= lvWndStyle.Items.Add; ListItem.Caption:= 'WS_MAXIMIZEBOX'; ListItem.Data:= TObject($10000); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_DLGMODALFRAME'; ListItem.Data:= TObject(1); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_NOPARENTNOTIFY'; ListItem.Data:= TObject(4); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_TOPMOST'; ListItem.Data:= TObject(8); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_ACCEPTFILES'; ListItem.Data:= TObject($10); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_TRANSPARENT'; ListItem.Data:= TObject($20); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_MDICHILD'; ListItem.Data:= TObject($40); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_TOOLWINDOW'; ListItem.Data:= TObject($80); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_WINDOWEDGE'; ListItem.Data:= TObject($100); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_CLIENTEDGE'; ListItem.Data:= TObject($200); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_CONTEXTHELP'; ListItem.Data:= TObject($400); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_RIGHT'; ListItem.Data:= TObject($1000); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_RTLREADING'; ListItem.Data:= TObject($2000); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_LEFTSCROLLBAR'; ListItem.Data:= TObject($4000); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_CONTROLPARENT'; ListItem.Data:= TObject($10000); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_STATICEDGE'; ListItem.Data:= TObject($20000); ListItem:= lvExWndStyle.Items.Add; ListItem.Caption:= 'WS_EX_APPWINDOW'; ListItem.Data:= TObject($40000); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_VREDRAW'; ListItem.Data:= TObject(1); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_HREDRAW'; ListItem.Data:= TObject(2); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_KEYCVTWINDOW'; ListItem.Data:= TObject(4); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_DBLCLKS'; ListItem.Data:= TObject(8); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_OWNDC'; ListItem.Data:= TObject($20); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_CLASSDC'; ListItem.Data:= TObject($40); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_PARENTDC'; ListItem.Data:= TObject($80); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_NOKEYCVT'; ListItem.Data:= TObject($100); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_NOCLOSE'; ListItem.Data:= TObject($200); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_SAVEBITS'; ListItem.Data:= TObject($800); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_BYTEALIGNCLIENT'; ListItem.Data:= TObject($1000); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_BYTEALIGNWINDOW'; ListItem.Data:= TObject($2000); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_GLOBALCLASS'; ListItem.Data:= TObject($4000); ListItem:= lvClassStyle.Items.Add; ListItem.Caption:= 'CS_IME'; ListItem.Data:= TObject($10000); end; procedure TfmWinapi.btnApplyClick(Sender: TObject); var i:integer; begin NewStyle:= 0; for i:= 0 to lvWndStyle.Items.Count -1 do begin if lvWndStyle.Items[i].Checked then NewStyle:= NewStyle or LongInt(lvWndStyle.Items[i].Data); end; NewExStyle:= 0; for i:= 0 to lvExWndStyle.Items.Count -1 do begin if lvExWndStyle.Items[i].Checked then NewExStyle:= NewExStyle or LongInt(lvExWndStyle.Items[i].Data); end; NewClassStyle:= 0; for i:= 0 to lvClassStyle.Items.Count -1 do begin if lvClassStyle.Items[i].Checked then NewClassStyle:= NewClassStyle or LongInt(lvClassStyle.Items[i].Data); end; SetWindowLong(SelWindow, GWL_STYLE, NewStyle); SetWindowLong(SelWindow, GWL_EXSTYLE, NewExStyle); SetClassLong(SelWindow, GCL_STYLE, NewClassStyle); SetWindowPos(SelWindow, HWND_TOP, StrToInt(EdWLeft.Text),StrToInt(EdWTop.Text), StrToInt(EdWWidth.Text), StrToInt(EdWHeight.Text), SWP_FRAMECHANGED); SetIcon(SelWindow,imWIcon.picture.icon); end; Урезал чутьчуть. Если хочешь могу проект просто кинуть
А че лучше то? Размер кода огромен, для того что бы всего лизь закрыть варнинг..... Хотя смотря что ТС дальше хочет делать....
ребят - благодарю. Под виртуалкой не видно, как курсор движется... - он как бы остается на месте. Но нажатие кнопки происходит - там, где нужно. "При нормальных условиях". Хотя нажать "yes" в UAC таким образом невозможно...=\ Делаю sleep 5000, настраиваю клик в нужном месте, запускаю "опасную программу" - и фиг там) Не кликает оно по окну этому( По обычным окнам - нормально, а по варнингу от UAC - не хочет Буду изыскивать другие способы запустить программу, блокируемую UAC без вмешательства юзера=\ ps. так же под дефолтным "недоадминским" аккаунтом в семерке заблочены такие консольные функции, как "net user" и "at". Обе доступны только "Built-in" администратору, аккаунт которого по умолчанию disabled. Включить его можно через lusrmgr.msc... а вот через net user - фиг( Кстати у built-in administrator UAC вообще отключен по дефолту... как и у SYSTEM я думаю. Тока как бы запуститься под ними из-под недоадмина без вмешательства пользователя....
Привет античат вопрос в следующем: Как можно реализовать в Delphi seeders через сайт ? Делаю некое подобие торрента
Народ,помогите плиз, с задачей на паскале.Найти корни квадратного трехчлена с заданными комплексными коэффициентами(при решении использовать тип запись).По идее раз коэффициенты комплексные,значит и решение должно быть комплексным числом,только как сделать тип для работы с ними я понять не могу.
Как так сделать, чтобы: Если компонент Webbrowser полностью загрузил страничку сайта, то выполняется какое-либо действие.
У Webbrowser есть событие OnDocumentComplite, оно тебе и поможет выполнить какое-либо действие когда страницы сайта загрузится полностью=)