VR
Virtual Reality On-line   Как?
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Каком к верху:

Раздел "Каком к верху", посвящён вашим вопросам "Как?". Если ты хочешь задать свой вопрос, то пиши мне сюда Почтальон. Пожалуйста, конкретизируй свои вопросы. Если твои вопросы будут маленькими и конкретными, то они попадут сюда, и ты их увидишь очень скоро. Иначе мне придётся писать отдельную статью, а такого у меня очень много и не известно, когда я напишу тебе ответ.


  • Как получить короткий путь файла если имеется длинный?

    Для этого уже давно существует функция GetShortPathName. Она имеет три параметра:

    • длинный путь (тип Pchar)
    • короткий путь, суда запишется результат (тип Pchar)
    • длинна буфера указанного во втором параметре (тип Integer).

  • Как можно скопировать файлы с помощью стандартных средств?

    Для этого есть специальная функция ShFileOperation.

    procedure TForm1.Copy1Click(Sender: TObject); 
    var
     FSrc,FDes,FPath: string;
    begin
     FDes := '';
     if not SelectDirectory('Select Directory', '', FDes) then exit;
    
     FSrc:=DirectoryPath +#0;
    
     DoSHFileOp(Handle, FileOpMode[0], FSrc, FDes, true); 
    end; 
    

    DirectoryPath – указывает на директорию, которую надо скопировать. Функция DoSHFileOp выглядит так:

    function TForm1.DoSHFileOp(Handle: THandle; OpMode: UInt; Src,
      Dest: string; DelRicleBin: Boolean): Boolean;
    var
     Ret: integer;
     ipFileOp: TSHFileOpStruct;
    begin
     Screen.Cursor:=crAppStart;
     FillChar(ipFileOp, SizeOf(ipFileOp), 0);
     with ipFileOp do
      begin
       wnd := Handle;
       wFunc := OpMode;
       pFrom := pChar(Src);
       pTo := pChar(Dest);
       if DelRicleBin then
        fFlags := FOF_ALLOWUNDO
       else
        fFlags := FOF_NOCONFIRMMKDIR;
       fAnyOperationsAborted := False;
       hNameMappings := nil;
       lpszProgressTitle := '';
      end;
     try
      Ret := SHFileOperation(ipFileOp);
     except
      Ret := 1;
     end;
     result := (Ret = 0);
     Screen.Cursor:=crDefault;
    end;
    

    FileOpMode – константа, которая выглядит как: const FileOpMode: array[0..3] of UInt =(FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME);

    Объявлять эту константу надо перед implementation. Например:

    var
      Form1: TForm1;
    
    const
     FileOpMode: array[0..3] of UInt =(FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME);
    
    implementation
    
    {$R *.DFM}
    

    С помощью этой функции можно копировать удалять директории вместе с подкаталогами. Только не забудь подключить в раздел USES модуль ShellApi.


  • Почему моя MDI Child форма при закрывании просто минимизируется? Как сделать так, чтобы она закрывалась?

    Создаёшь обработчик события OnClose и в нём пишешь Action := caFree.


  • Как с помощью CreateProcess сделать так, чтобы прога ждала завершения работы другой???

    Легко:

    var
     zAppName:array[0..512] of char;
     zCurDir:array[0..255] of char;
     WorkDir:String;
     StartupInfo:TStartupInfo;
     ProcessInfo:TProcessInformation;
    begin
     StrPCopy(zAppName,FileName);
     GetDir(0,WorkDir);
     StrPCopy(zCurDir,WorkDir);
     FillChar(StartupInfo,Sizeof(StartupInfo),#0);
     StartupInfo.cb := Sizeof(StartupInfo);
    
    
     StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := SW_SHOW;
     if not CreateProcess(nil,
      zAppName,                { указатель командной строки, путь к
                                 проге + аргументы }
      nil,                     { указатель на процесс атрибутов безопасности }
      nil,                     { указатель на поток атрибутов безопасности }
      false,                   { флаг родительского обработчика }
      CREATE_NEW_CONSOLE or    { флаг создания }
      NORMAL_PRIORITY_CLASS,
      nil,                     { указатель на новую среду процесса }
      nil,                     { указатель на имя текущей директории }
      StartupInfo,             { указатель на STARTUPINFO }
      ProcessInfo)             { указатель на PROCESS_INF }
      then Result := -1
     else
      begin
       WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
       GetExitCodeProcess(ProcessInfo.hProcess,Result);
      end;
    end;
    

  • Copyright©: Horrific aka Флёнов Михаил
    Design by FMk group©