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

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Какой ключ реестра отвечает за действие при закрывании крышки ноута,
    и как отследить нажатие определённых клавишь, если окно проги не в фокусе?
     
  2. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    stepashka_, посмотри рабочий вариант кода. Не совсем то, что у тебя, но думаю, пригодиться:
    Это для Delphi 7, не могу сказать точно, будет ли правильно работать, если откомпилируешь в другой среде.

    В архиве exe + исходник.
     
  3. stepashka_

    stepashka_ Мотоциклист

    Joined:
    9 Nov 2009
    Messages:
    1,022
    Likes Received:
    423
    Reputations:
    234
    хммм.. Странно, твой скомпиленый файлик норм работает) а мой не хочет..
    Может дело в 10 инди?
     
  4. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    У меня тоже Indy 10. Не могу тогда точно сказать, в чем у тебя проблемы. Могу посоветовать отснифффить пакеты, отправляемые программой.

    Если у тебя не Delphi 7, а какая то другая версия, тогда очень вероятно, что проблема именно в этом.
     
  5. [stranger]

    [stranger] Member

    Joined:
    2 Feb 2010
    Messages:
    167
    Likes Received:
    29
    Reputations:
    4
    использование инди критично?
    на винсоке все отлично работает и никаких проблем с совместимостью компонентов :D
     
    1 person likes this.
  6. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Уходите от Indy! Мне много советовали Synapse, а я не верил - стабильная и надёжная вещь!
    Как на неё перешёл все проблемы кончились!
     
  7. ChymeNik

    ChymeNik Member

    Joined:
    31 Aug 2010
    Messages:
    29
    Likes Received:
    7
    Reputations:
    9
    +1
    пользуюсь Synapse
     
  8. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,414
    Likes Received:
    911
    Reputations:
    863
    Подскажите как в делфи скопировать директорию с С:\x в D:\Y и заархевировать...
     
    _________________________
  9. Skript

    Skript New Member

    Joined:
    1 Nov 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Привет Всем, собственно вопрос в том как получить статус сервера(TSocket) т.е. запущен ли сервер или нет.
    Пробывал метод сканирование портов но если ip не существует то программа думает очень долго, может кто подсказать если какие небудь методы? Или как установить таймаут,а то пробывал так нечего и не вышло :mad:
     
  10. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    делаешь маленький юнит
    PHP:
    unit FilesOp

    interface 

    uses FormsSysUtilsShellAPIDialogs

    procedure CopyFiles(const FromFolderstring; const ToFolderstring); 

    implementation 

    procedure CopyFiles
    (const FromFolderstring; const ToFolderstring); 
    var 
      
    Fo      TSHFileOpStruct
      
    buffer  : array[0..4096of char
      
    p       pchar
    begin 
      FillChar
    (Buffersizeof(Buffer), #0); 
      
    := @buffer
      
    StrECopy(pPChar(FromFolder)); //директория, которую мы хотим скопировать
      
    FillChar(Fosizeof(Fo), #0); 
      
    Fo.Wnd    := Application.Handle
      
    Fo.wFunc  := FO_COPY
      
    Fo.pFrom  := @Buffer
      
    Fo.pTo    := PChar(ToFolder); //куда будет скопирована директория
      
    Fo.fFlags := 0
      if ((
    SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then 
        ShowMessage
    ('File copy process cancelled'
    end

    end.
    Подключаешь и вызываешь CopyFiles(откуда, куда);
    а заархивировать, или свой алго архивации, или стандартную либу прикрутить и пользоваться, в зависимости от обстаятельств
     
    1 person likes this.
  11. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Думаю лучшее решение в данном случае - работать с потоками, тогда не будет подвисать... Можешь так же засекать нужное время, если нет ответа, убивать поток и всё
     
  12. Nizhegorodets

    Nizhegorodets Member

    Joined:
    21 Mar 2009
    Messages:
    80
    Likes Received:
    66
    Reputations:
    9
    Здравствуйте, мне нужно заполнить поле 9x9 различными цифрами, как в судоку.

    Делаю так, рандомно загоняею цифру в двумерный массив, потом начинаю проверять строку и стоблец в котором цифра стоит. Если такой цифры нет, то оставляю, иначе генерирую новую цифру до тех пор, пока она станет различной по сравнению с цифрами в строке и столбце.

    Но возникла проблема. Получается сгенерировать таким способ только поле максимальным размером 7x7. Далее программа уходит в бесконечный цикл...

    Может быть кто знает какой-нибудь другой алгоритм?

    Вот мой код этого алгоритма.
    Code:
     
    label xx;
    var a:array [0..10,0..10] of integer;
        i,j,l,m:integer;
    begin
    
    {fillchar(a,sizeof(a),0);}
    i:=1;
    j:=1;
    
    randomize;
    while j<>7 do begin
         xx: m:=random(8)+1;
         a[j,i]:=m;
    
         for l:=0 to j-1 do begin
             if a[l,i]=m then goto xx;
         end;
    
         for l:=0 to i-1 do begin
             if a[j,l]=m then goto xx;
         end;
    
         inc(i);
         if i=7 then begin inc(j); i:=1; end;
    end;
    // Выводим на экран
    for j:=1 to 9 do begin
        for i:=1 to 9 do begin
            write(a[j,i],' ');
    
        end;
        writeln;
    end;
    readln;
    end.
    
     
  13. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Нужно именно для судоку или просто как в судоку? В смысле тех же правил придерживаться?
     
  14. Nizhegorodets

    Nizhegorodets Member

    Joined:
    21 Mar 2009
    Messages:
    80
    Likes Received:
    66
    Reputations:
    9
    Да придерживаться тех же правил.
     
  15. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Ну типа того...
    Code:
    Var
      Zellen:Array[0..8,0..8] Of Byte;
    
    Function OK(X,Y,N:Byte):Boolean;
    Var
      Z,K:Byte;
    Begin
      Result:=False;
      For Z:=0 To 8 Do
        If (Zellen[X,Z]=N) Or (Zellen[Z,Y]=N) Then Exit;
      For Z:=0 To 2 Do
        For K:=0 To 2 Do
          If (Zellen[X Div 3*3+K,Y Div 3*3+Z]=N) Then Exit;
      Result:=True;
    End;
    
    Function Error(X,Y:Byte):Boolean;
    Var
      L,Z,K,R:Byte;
      Mas:Array[1..9] Of Byte;
    Begin
      For Z:=1 To 9 Do
        Mas[Z]:=Z;
      L:=9;
      For Z:=0 To 8 Do
        Begin
          R:=Zellen[X,Z];
          If (R<>0) Then
            If Mas[R]<>0 Then
              Begin
                Mas[R]:=0;
                Dec(L);
              End;
          R:=Zellen[Z,Y];
          If (R<>0) Then
            If Mas[R]<>0 Then
              Begin
                Mas[R]:=0;
                Dec(L);
              End;
        End;
      For Z:=0 To 2 Do
        For K:=0 To 2 Do
          Begin
            R:=Zellen[X Div 3*3+K,Y Div 3*3+Z];
            If (R<>0) Then
              If Mas[R]<>0 Then
                Begin
                  Mas[R]:=0;
                  Dec(L);
                End;
          End;
      Result:=L=0;
    End;
    
    Function NewBrech:Boolean;
    Var
      X,Y,N:Byte;
    Begin
      For Y:=0 To 8 Do
        For X:=0 To 8 Do
          Begin
            If Error(X,Y) Then
              Begin
                NewBrech:=False;
                Exit;
              End;
            Repeat
              N:=Round(Random*8)+1;
            Until OK(X,Y,N);
            Zellen[X,Y]:=N;
          End;
    End;
     
  16. Skript

    Skript New Member

    Joined:
    1 Nov 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Isaev, как мне известно потоковые сокеты начинаю свою работу когда уже установленно подключения... если я не прав то поправте, был бы очень благодарен если увидел реализацию потокового сокета до подключения к серверу.
     
  17. Isaev

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

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Skript да уж, странный модуль, если так... (сейчас Delphi нет под руками, не могу проверить)
    А что пишешь вообще? Может можно сделать проще
     
  18. Skript

    Skript New Member

    Joined:
    1 Nov 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Isaev у меня в организации 40 компов, я написал программу для удалённого администрирования, ну там чисто под свои нужды что бы не бегать из за разных пустяков.
    Я выступаю в качестве клиента т.к. если я буду сервером это будет лишняя на грузка сервер. Так вот мне нужно отследить какой из компов в сети а какой нет. Не на одном форуме не смогли помоч мне с данной проблемой :mad:
     
  19. Boolean

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

    Joined:
    5 Sep 2010
    Messages:
    147
    Likes Received:
    83
    Reputations:
    78
    а не проще сделать на одном компе что то типа сервера? все другие компы клиенты и ты клиент, все конектятся к серверу, а ты туда конектишься " с правами админа"
     
  20. buket

    buket New Member

    Joined:
    7 Apr 2007
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    подскажите как выставить поля при выводе на печать из richedit

    PHP:
    procedure TForm2.Button1Click(SenderTObject);
    begin
     
    if PrintDialog.Execute then
     begin
     richedit1
    .Print(richedit1.Text);
     
    end;
    end;
     
Thread Status:
Not open for further replies.