Товарищи, подскажите, пожалуйста, на счет этой задачи: С помощью компонента TabControl создать электрон.записную книжку, которая содержит инфу о 5-ти людях: №тел., фио, адрес, дата рождения и тд. На форму бросил, значит, TabControl, создал вкладки (вышеперечисленные), в него же запихнул List, разместил кнопки "Добавить" и "Удалить"..вот что получилось: И какие процедуры теперь нужно именно прописать в button'ах, чтобы всё нормально работало..и как лучше оформить TabControl, чтобы при переключении вкладок, ФИО оставалось на месте =)
Внедритья в приложение под видом dll у меня получилось, но вот как получить дескриптор сокета этой проги? Я так понимаю сначала нужно получить адрес этой функции через GetProcAddress потом через ReadProcessMemory читать байты по этому адресу? Получить адрес api функции "send" можно так? если не ошибаюсь, да? Code: pTemp: Pointer; pTemp:=GetProcAddress(GetModuleHandle('wsock32.dll'),'send'); ..... Порыскал на гугле, нашёл уже почти готовые модули для этого, извините за лень
Подскажите плз, как в delphi, работая с компонентом tabcontrol, изменить содержимое компонента listbox при переключении закладки?
Code: procedure TForm1.TabControl1Change(Sender: TObject); begin ShowMessage(TabControl1.Tabs.Strings[TabControl1.TabIndex]); end; Вместо showmessage пишешь сверение (if) с указаным текстом и текстом закладки закладки, и изменяешь то что нужно (а именно сод. listbox) при определенном тексте выбранной закладки (думаю понятно объяснил)
SHAXID Пример: Code: procedure TForm1.TabControl1Change(Sender: TObject); begin if TabControl1.Tabs.Strings[TabControl1.TabIndex]='11111111' then begin Memo1.Lines.Text:='Эта первая вкладка!'; end; if TabControl1.Tabs.Strings[TabControl1.TabIndex]='22222222' then begin Memo1.Lines.Text:='Эта вторая вкладка!'; end; if TabControl1.Tabs.Strings[TabControl1.TabIndex]='33333333' then begin Memo1.Lines.Text:='Эта третья вкладка!'; end; end; Естественно все вкладки: 11111111 22222222 33333333 Так более менее понятно?
Не могли бы подсказать как с приложения перекинуть пользователя на страницу интернета, и как ребатнуть комп не кого не о чем не спрашивая??
И ещё вопросик как обойти вопрос брэндмауэра типо блокировать или нет приложение, хотя прикол нажал блокировать и все равно соединение установилось и лог ушел)
Возник еще один вопросец... Нужно рассчитать кол-во товара значит, и чтоб результат расчета появлялся в Form1.StringGrid1.Cells[2,1]..т.е. вводим в Edit1 сумму, ждем "Рассчитать" и в ячейке появляется результат.. Вот скрин для наглядности:
procedure расчитатьbtn.click (sender:Tobject) x,y:integer; begin x:=strtoint(edit1.text); y:=формула которая чтото делает с Х; stringgrid1.cells[2,1]:=inttostr(y); end; вот как то так
0ldbi4, Выруби брэндмауэр и он не будет тебе вопросы задавать....SHAXID, ты что то с переменными напутал, посмотри повнимательней, у тебя x и y разных типов и поэтому ты неможешь ничего сделать. Incompatible types=несовместимые типы.
SHAXID, вы пытаетесь 2 разных типа поделить. Замените Code: y := x / strtoint (stringgrid1.cells[1,1]);
Code: ShellExecute (GetDesktopWindow(), 'open', 'http://downteam.ru/', '', '', SW_SHOWDEFAULT); shellapi в uses не забудьте добавить.
0ldbi4 Функция завершения процесса по PID ( в том числе и системных) Code: function ProcessTerminate(dwPID:Cardinal):Boolean; var hToken:THandle; SeDebugNameValue:Int64; tkp:TOKEN_PRIVILEGES; ReturnLength:Cardinal; hProcess:THandle; begin Result:=false; // Добавляем привилегию SeDebugPrivilege // Для начала получаем токен нашего процесса if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then exit; // Получаем LUID привилегии if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue ) then begin CloseHandle(hToken); exit; end; tkp.PrivilegeCount:= 1; tkp.Privileges[0].Luid := SeDebugNameValue; tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; // Добавляем привилегию к нашему процессу AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength); if GetLastError()<> ERROR_SUCCESS then exit; // Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем // завершить и системный процесс // Получаем дескриптор процесса для его завершения hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID); if hProcess =0 then exit; // Завершаем процесс if not TerminateProcess(hProcess, DWORD(-1)) then exit; CloseHandle( hProcess ); // Удаляем привилегию tkp.Privileges[0].Attributes := 0; AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength); if GetLastError() <> ERROR_SUCCESS then exit; Result:=true; end; Получить PID указанного процесса можно так Code: function GetProcID(Names: String): cardinal; var PHandle: THandle; ProcEntry: TProcessEntry32; lpName, Name: string; begin Result:=0; Name:=UpperCase(Names); PHandle:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); ProcEntry.dwSize:=sizeof(TProcessEntry32); if Process32First(PHandle, ProcEntry) then begin lpName:=ProcEntry.szExeFile; lpName:=UpperCase(lpName); if lpName=Name then Result:=ProcEntry.th32ProcessID; end; while Process32Next(PHandle,ProcEntry) do begin lpName:=ProcEntry.szExeFile; lpName:=UpperCase(lpName); if lpName=Name then Result:=ProcEntry.th32ProcessID; end; CloseHandle(PHandle); end; Не забудь добавить в uses TLHelp32 Как уже понял вызывается завершение процесса так Code: ProcessTerminate(GetProcID('Winrar.exe'));