[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. SHAXID

    SHAXID Elder - Старейшина

    Joined:
    13 Dec 2007
    Messages:
    24
    Likes Received:
    17
    Reputations:
    -6
    Товарищи, подскажите, пожалуйста, на счет этой задачи:
    С помощью компонента TabControl создать электрон.записную книжку, которая содержит инфу о 5-ти людях: №тел., фио, адрес, дата рождения и тд.
    На форму бросил, значит, TabControl, создал вкладки (вышеперечисленные), в него же запихнул List, разместил кнопки "Добавить" и "Удалить"..вот что получилось:
    [​IMG]

    И какие процедуры теперь нужно именно прописать в button'ах, чтобы всё нормально работало..и как лучше оформить TabControl, чтобы при переключении вкладок, ФИО оставалось на месте =)
     
  2. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    Внедритья в приложение под видом dll у меня получилось, но вот как получить дескриптор сокета этой проги?
    Я так понимаю сначала нужно получить адрес этой функции через GetProcAddress потом через ReadProcessMemory читать байты по этому адресу?

    Получить адрес api функции "send" можно так? если не ошибаюсь, да?
    Code:
    pTemp: Pointer;
    
    pTemp:=GetProcAddress(GetModuleHandle('wsock32.dll'),'send');
    
    .....
    Порыскал на гугле, нашёл уже почти готовые модули для этого, извините за лень
     
    #4702 ZET36, 20 Nov 2009
    Last edited: 21 Nov 2009
  3. SHAXID

    SHAXID Elder - Старейшина

    Joined:
    13 Dec 2007
    Messages:
    24
    Likes Received:
    17
    Reputations:
    -6
    Подскажите плз, как в delphi, работая с компонентом tabcontrol, изменить содержимое компонента listbox при переключении закладки?
     
  4. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Code:
    procedure TForm1.TabControl1Change(Sender: TObject);
    begin
     ShowMessage(TabControl1.Tabs.Strings[TabControl1.TabIndex]);
    end;
    Вместо showmessage пишешь сверение (if) с указаным текстом и текстом закладки закладки, и изменяешь то что нужно (а именно сод. listbox) при определенном тексте выбранной закладки

    (думаю понятно объяснил)
     
  5. SHAXID

    SHAXID Elder - Старейшина

    Joined:
    13 Dec 2007
    Messages:
    24
    Likes Received:
    17
    Reputations:
    -6

    че-то как-то не догнал.. =(

    Вот такая тема у меня вообщем есть..а дальше вот хз..
    [​IMG]
     
  6. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    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

    Так более менее понятно? :)
     
    1 person likes this.
  7. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Не могли бы подсказать как с приложения перекинуть пользователя на страницу интернета, и как ребатнуть комп не кого не о чем не спрашивая??
     
  8. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    И ещё вопросик как обойти вопрос брэндмауэра типо блокировать или нет приложение, хотя прикол нажал блокировать и все равно соединение установилось и лог ушел)
     
  9. SHAXID

    SHAXID Elder - Старейшина

    Joined:
    13 Dec 2007
    Messages:
    24
    Likes Received:
    17
    Reputations:
    -6
    Возник еще один вопросец...
    Нужно рассчитать кол-во товара значит, и чтоб результат расчета появлялся в
    Form1.StringGrid1.Cells[2,1]..т.е. вводим в Edit1 сумму, ждем "Рассчитать" и в ячейке появляется результат..
    Вот скрин для наглядности:
    [​IMG]
     
  10. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    procedure расчитатьbtn.click (sender:Tobject)
    x,y:integer;
    begin
    x:=strtoint(edit1.text);
    y:=формула которая чтото делает с Х;
    stringgrid1.cells[2,1]:=inttostr(y);
    end;

    вот как то так
     
  11. SHAXID

    SHAXID Elder - Старейшина

    Joined:
    13 Dec 2007
    Messages:
    24
    Likes Received:
    17
    Reputations:
    -6
    Вот такая тема теперь появляется:
    [​IMG]
     
    #4711 SHAXID, 21 Nov 2009
    Last edited: 21 Nov 2009
  12. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    что это значит?
     
  13. SHAXID

    SHAXID Elder - Старейшина

    Joined:
    13 Dec 2007
    Messages:
    24
    Likes Received:
    17
    Reputations:
    -6
    редактнул пост :)
     
  14. DiHWO

    DiHWO Member

    Joined:
    23 Oct 2009
    Messages:
    93
    Likes Received:
    10
    Reputations:
    0
    0ldbi4, Выруби брэндмауэр и он не будет тебе вопросы задавать....SHAXID, ты что то с переменными напутал, посмотри повнимательней, у тебя x и y разных типов и поэтому ты неможешь ничего сделать. Incompatible types=несовместимые типы.
     
    #4714 DiHWO, 21 Nov 2009
    Last edited: 21 Nov 2009
  15. --StraNger--

    --StraNger-- Member

    Joined:
    4 Jan 2009
    Messages:
    63
    Likes Received:
    57
    Reputations:
    5
    значение stringgrid1.cells[1,1] - строка.
    преобразуй с помощью strtoint
     
  16. Пуховой

    Joined:
    25 Nov 2007
    Messages:
    46
    Likes Received:
    37
    Reputations:
    0
    SHAXID, вы пытаетесь 2 разных типа поделить.
    Замените
    Code:
    y := x / strtoint (stringgrid1.cells[1,1]);
     
  17. Пуховой

    Joined:
    25 Nov 2007
    Messages:
    46
    Likes Received:
    37
    Reputations:
    0
    Code:
    ShellExecute (GetDesktopWindow(), 'open', 'http://downteam.ru/', '', '', SW_SHOWDEFAULT);
    shellapi в uses не забудьте добавить.
     
  18. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Тоже всех поблагодарю, а как вырубить брэндмауер на чужом компе?
     
  19. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    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'));
    
     
    #4719 ZET36, 21 Nov 2009
    Last edited: 21 Nov 2009
    1 person likes this.
  20. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    В XP - WinExec('net stop SharedAccess', SW_HIDE);
     
Thread Status:
Not open for further replies.