[ 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. art2222

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

    Joined:
    28 Apr 2008
    Messages:
    118
    Likes Received:
    57
    Reputations:
    10
    Ну например так. Это уже от задумки зависит.

    Code:
    randomize;
    a:=random(2);
    if (a=0) then b:=false else b:=true;
    a:=random(3);
    case a of
    0: SetLedState(ktCapsLock, b);
    1: SetLedState(ktNumLock, b)
    2: SetLedState(ktScrollLock, b);
    end;
    
     
  2. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    как при нажатии батона проверить: есть ли в edit1 рус буквы или пробелы
     
    1 person likes this.
  3. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    как сделать билдер?

    как при нажатии батона проверить: есть ли в edit1 рус буквы или пробелы?
     
  4. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Code:
    procedure TForm1.Button2Click(Sender: TObject);
    var i,n:integer;
    str:string;
    begin
    str:=edit1.Text;
    for i:=1 to length(str) do begin
     for n:=192 to 255 do begin
      if copy(str,i,1) = char(n) then delete(str,i,1);
     end;
      if copy(str,i,1) = char(32) then delete(str,i,1);
    end;
    edit1.Text := str;
    end;
    Посимвольно проверяй и всё...
     
    1 person likes this.
  5. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Не подходит
     
  6. erolom

    erolom New Member

    Joined:
    14 Mar 2009
    Messages:
    0
    Likes Received:
    4
    Reputations:
    1
    ок спс за исходники буду копаться=))
     
  7. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Есть такой компонент ICQclient, нужно найти в событиях:
    1) Нет возможности подключится к сервоку (Нет инета на компе)
    2) и таймаут подключений на 1 номер аси
     
  8. art2222

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

    Joined:
    28 Apr 2008
    Messages:
    118
    Likes Received:
    57
    Reputations:
    10
    Проверить подключение к инету можно так:

    Code:
    if GetSystemMetrics(SM_NETWORK) and $01 = $01 then
      ShowMessage('Computer is attached to a network!')
    else
      ShowMessage('Computer is not attached to a network!');
     
  9. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Не подходит, т.к. если icq сменит протоколы , то будет происходить попытка с сервером icq

    С этим я разобрался, теперь надо команду которыя будет делать батон не кликабельным и наоборот
     
    #3049 НTL, 31 Mar 2009
    Last edited: 31 Mar 2009
  10. art2222

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

    Joined:
    28 Apr 2008
    Messages:
    118
    Likes Received:
    57
    Reputations:
    10
    Button1.enabled:= not Button1.Enabled;

    Это просто проверка соединения с инетом.
     
  11. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    А обратно как?
     
  12. art2222

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

    Joined:
    28 Apr 2008
    Messages:
    118
    Likes Received:
    57
    Reputations:
    10
    Button1.enabled:= true //доступен
    Button1.enabled:= false //недоступен
     
  13. Nick_Rimer

    Nick_Rimer New Member

    Joined:
    12 May 2008
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    UnDelphiX - частые ошибки типа Access Violation

    Здравствуйте!
    С DelphiX начал общаться совсем недавно, скачал и установил какую-то доступную версию неофициального DelphiX (так называемый UnDelphiX)..

    Попробовал написать свою первую программу. Это простенькая игрушка: есть игрок, который управляется стрелочками с клавиатуры, на него с верней части экрана падают звезды. При касании звезды игрок умирает. Иногда выпадают некоторые бонусы (сейчас 2: некое бессмертие с возможностью уничтожения звезд и небольшое замедление скорости всех объектов).. С течением времени, кстати, звезды появляются все чаще и чаще.. К моменту ошибки максимум на экране бывало отображалось до 28 живых звезд

    Все вроде бы работает, можно играть, но иногда, в произвольный момент (можно и три минуты играть) игра вылетает, выдавая ошибку Access Violation и окошко CPU (с которым я работать совершенно не умею, и поэтому я не могу сделать отладку программы).

    Это портит, понятное дело, всю игру.. я прилагаю к сообщению ссылку на архив со своей программой, может быть у кого-нибудь найдется время посмотреть и помочь мне, вдруг я какие ошибки совершаю, чтобы в будущем этого не было, пока проект-то не такой серьезный.. детская же совсем игруля..

    Я просто устал несколько дней подряд бороться с ошибками, прошу помощи! Спасибо всем тем, кто откликнется!
    На всякий случай прилагаю установщик моей версии UnDelphiX).

    Для справок:
    ОС: WinVista Home Premium
    версия Delphi 7

    P.S. раньше еще часто возникала ошибка типа Stack Overflow (я не знаю, удалось ли мне от нее целиком избавиться, но я давно ее не наблюдал.. у меня в таймерах я вызывал эти же таймеры, что, возможно, давало эффект обратной связи и зацикливание.. я устранил это путем булевых переменных, вроде бы теперь не возникает.. но если такое обнаружится в ходе отладки, просьба, сообщите об этом мне)..

    Ссылка: Скачать (размер 3,867 Mb)
    (из-за проблем сервера не смог выложить на ucoz, поэтому простите за rapidshare)

    Кстати, установщик UnDelphiX предлагает найти и установить новую версию. Ее он находит, успешно куда-то загружает, а установщик не запускает. Помогите определить, куда он закачивает новую версию! Спасибо!
     
    #3053 Nick_Rimer, 31 Mar 2009
    Last edited: 31 Mar 2009
  14. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    Программу сейчас посмотреть не могу.
    Но попробуй везде где только можешь вставить такие строчки
    При отладке программы будут возникать ошибки всё-равно.
    Но когда будешь играть запуская программу не из Delphi a просто из Винды, то ошибок не будет.
    попробуй, может просто программа закроется в какой-то момент (ошибка не выведется и там из-за глюка её закроет..)

    Насчет UnDelphi попробуй папку Temp. Чаще всего туда загружаются такие файлы. Поищи по дате
    попробуй ещё папку Tempory Internet Files в папкее Windows.
     
  15. Nick_Rimer

    Nick_Rimer New Member

    Joined:
    12 May 2008
    Messages:
    19
    Likes Received:
    1
    Reputations:
    0
    Немного добавим..

    Тогда у меня еще пару вопросов:

    1. Все-таки нарвался на Stack overflow.. есть ли на него exception? чтобы попробовать его отловить.. и избавиться бы от него! :)

    2. Когда загружается приложение, курсор мышки сразу устанавливается на середину.. меня это бесит, мне в этом приложении вообще мышь не нужна.. убрать бы этот курсор на время работы приложения.. только чтобы в других приложениях он был! :)

    Спасибо.. только и все предыдущее пока остается в силе..
     
  16. xaker-boss

    xaker-boss Elder - Старейшина

    Joined:
    6 Mar 2007
    Messages:
    251
    Likes Received:
    49
    Reputations:
    -11
    Пацаны, ну помогите написать один код на delphi который будет каждую минуту открывать файл 1.txt в диске C:\ , и если там написано '123', то тогда программа должна проверить запущен ли процесс 1.exe, и если да, то закрыть его и вывести сообщение типа 'Процесс закрыт', цикл должен быть бессконечным.

    Плиз, просто сам никак не могу написать такой код, новичок еще в этом деле...=)))
     
    2 people like this.
  17. art2222

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

    Joined:
    28 Apr 2008
    Messages:
    118
    Likes Received:
    57
    Reputations:
    10
    Code:
    uses 
    Psapi, tlhelp32; 
    
    procedure CreateWin9xProcessList(List: TstringList); 
    var 
    hSnapShot: THandle; 
    ProcInfo: TProcessEntry32; 
    begin 
    if List = nil then Exit; 
    hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    if (hSnapShot <> THandle(-1)) then 
    begin 
       ProcInfo.dwSize := SizeOf(ProcInfo); 
       if (Process32First(hSnapshot, ProcInfo)) then 
       begin 
         List.Add(ProcInfo.szExeFile); 
         while (Process32Next(hSnapShot, ProcInfo)) do 
           List.Add(ProcInfo.szExeFile); 
       end; 
       CloseHandle(hSnapShot); 
    end; 
    end; 
    
    procedure CreateWinNTProcessList(List: TstringList); 
    var 
    PIDArray: array [0..1023] of DWORD; 
    cb: DWORD; 
    I: Integer; 
    ProcCount: Integer; 
    hMod: HMODULE; 
    hProcess: THandle; 
    ModuleName: array [0..300] of Char; 
    begin 
    if List = nil then Exit; 
    EnumProcesses(@PIDArray, SizeOf(PIDArray), cb); 
    ProcCount := cb div SizeOf(DWORD); 
    for I := 0 to ProcCount - 1 do 
    begin 
       hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or 
         PROCESS_VM_READ, 
         False, 
         PIDArray[I]); 
       if (hProcess <> 0) then 
       begin 
         EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb); 
         GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName)); 
         List.Add(ModuleName); 
         CloseHandle(hProcess); 
       end; 
    end; 
    end; 
    
     
    
    procedure GetProcessList(var List: TstringList); 
    var 
    ovi: TOSVersionInfo; 
    begin 
    if List = nil then Exit; 
    ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); 
    GetVersionEx(ovi); 
    case ovi.dwPlatformId of 
       VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List); 
       VER_PLATFORM_WIN32_NT: CreateWinNTProcessList(List); 
    end 
    end; 
    
     
    
    function EXE_Running(FileName: string; bFullpath: Boolean): Boolean; 
    var 
    i: Integer; 
    MyProcList: TstringList; 
    begin 
    MyProcList := TStringList.Create; 
    try 
       GetProcessList(MyProcList); 
       Result := False; 
       if MyProcList = nil then Exit; 
       for i := 0 to MyProcList.Count - 1 do 
       begin 
         if not bFullpath then 
         begin 
           if CompareText(ExtractFileName(MyProcList.Strings[i]), FileName) = 0 then 
             Result := True 
         end 
         else if CompareText(MyProcList.strings[i], FileName) = 0 then Result := True; 
         if Result then Break; 
       end; 
    finally 
       MyProcList.Free; 
    end; 
    
    end; 
    
    (c) DRKB

    Проверяем так:

    Code:
    procedure CheckFile;
    var
      f: TextFile;
      s: string;
    begin
      AssignFile(f,'c:\1.txt');
      Reset(f);
      Readln(f,s);
      if s='123' then
      begin
        if EXE_Running('1.exe', False) then
          ShowMessage('EXE is running')
        else
          ShowMessage('EXE is not running');
      end;
      CloseFile(f);
    end;
    
    Потом в цикле вызываешь процедуру и все.

    А вот как нужно убивать процесс зная только его имя (notepad.exe например)
    Code:
    uses 
    Tlhelp32, Windows, SysUtils; 
    
    function KillTask(ExeFileName: string): integer; 
    const 
    PROCESS_TERMINATE=$0001; 
    var 
    ContinueLoop: BOOL; 
    FSnapshotHandle: THandle; 
    FProcessEntry32: TProcessEntry32; 
    begin 
    result := 0; 
    FSnapshotHandle := CreateToolhelp32Snapshot 
                        (TH32CS_SNAPPROCESS, 0); 
    FProcessEntry32.dwSize := Sizeof(FProcessEntry32); 
    ContinueLoop := Process32First(FSnapshotHandle, 
                                    FProcessEntry32); 
    while integer(ContinueLoop) <> 0 do 
    begin 
       if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
            UpperCase(ExeFileName)) 
        or (UpperCase(FProcessEntry32.szExeFile) = 
            UpperCase(ExeFileName))) then 
         Result := Integer(TerminateProcess(OpenProcess( 
                           PROCESS_TERMINATE, BOOL(0), 
                           FProcessEntry32.th32ProcessID), 0)); 
       ContinueLoop := Process32Next(FSnapshotHandle, 
                                     FProcessEntry32); 
    end;  
    CloseHandle(FSnapshotHandle); 
    end;
    
    
     
    #3057 art2222, 31 Mar 2009
    Last edited: 31 Mar 2009
    1 person likes this.
  18. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    Про процессы не знаю - поищи в гугле, а вообще:

    1) Ставишь на форму таймер, ставишь его Interval.
    2) В таймере пишешь, что-то типа
     
  19. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    2 не знаю, поковыряйся в настройках окна. Там есть курсоры, может можно поставить что-то типаа none
     
  20. Dr.Gonzo

    Dr.Gonzo Member

    Joined:
    26 Feb 2009
    Messages:
    29
    Likes Received:
    9
    Reputations:
    5
    Народ! Не знаю куда запостить, не злитесь, если не туда.
    Нужно разослать письмо в html-формате с аттачем.
    Решил всё делать на indy в Delphi7
    Возникло 2 проблемы:

    1. Нужно менять строку отправителя, а так как я авторизуюсь на сервере mail.ru, то он не дает писать от чужого имени. Может кто знает, есть ли хосты, не требующие ввода логина и пароля?
    Code:
      smtp.Host:='smtp.mail.ru';
      smtp.AuthenticationType := atLogin;
      smtp.Port:=25;
      smtp.Username:='********';
      smtp.Password:='*********';
    
    2. Не могу сделать, чтобы письмо было в html-формате, если прикрепляю аттач, то письмо идет, как plaintext, если убираю строку вставки аттача, то всё нормально:
    Code:
     Msg.ClearBody;
     TIdAttachment.Create(Msg.MessageParts, 'C:\1.txt');
      Msg.Body.Add ('Zdes<br>html');
      TidText.Create( Msg.MessageParts,  Msg.Body);
      Msg.MessageParts.Items[0].ContentType := 'application/octet';
      Msg.MessageParts.Items[1].ContentType := 'text/html';
     Msg.ContentType := 'multipart/mixed';
      Msg.CharSet:= 'Windows-1251';
      Msg.Encoding:= meMIME;
    
    
     
Thread Status:
Not open for further replies.