Вторник, 29.09.2026, 10:15
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Форма входа
Меню сайта
Главная » FAQ » Программирование Delphi [ Добавить вопрос ]

Программирование Delphi [91]
Вопрос-Ответ по программированию

Вызовите Windows API функцию SHAddToRecentDocs() передав nil вместо имени файла в качестве параметра.
Пример :

 
             uses 
               ShlOBJ; 
 
             procedure TForm1.Button1Click(Sender: TObject); 
             begin 
               SHAddToRecentDocs(SHARD_PATH, nil); 
             end;

См. пример
Пример :

 
             procedure TForm1.Button1Click(Sender: TObject); 
             var 
               CommPort : string; 
               hCommFile : THandle; 
               ModemStat : DWord; 
             begin 
               CommPort := 'COM2'; 
 
              {Open the comm port} 
               hCommFile := CreateFile(PChar(CommPort), 
                                       GENERIC_READ, 
                                       0, 
                                       nil, 
                                       OPEN_EXISTING, 
                                       FILE_ATTRIBUTE_NORMAL, 
                                       0); 
               if hCommFile = INVALID_HANDLE_VALUE then 
               begin 
                 ShowMessage('Unable to open '+ CommPort); 
                 exit; 
               end; 
 
              {Get the Modem Status} 
               if GetCommModemStatus(hCommFile, ModemStat) <> false then begin 
                 if ModemStat and MS_CTS_ON <> 0 then 
                   ShowMessage('The CTS (clear-to-send) is on.'); 
                 if ModemStat and MS_DSR_ON <> 0 then 
                   ShowMessage('The DSR (data-set-ready) is on.'); 
                 if ModemStat and MS_RING_ON <> 0then 
                   ShowMessage('The ring indicator is on.'); 
                 if ModemStat and MS_RLSD_ON <> 0 then 
                   ShowMessage('The RLSD (receive-line-signal-detect) is  
             on.'); 
             end; 
 
              {Close the comm port} 
               CloseHandle(hCommFile); 
             end; 
Добавил: casperof

             type 
               TForm1 = class(TForm) 
                 procedure FormCreate(Sender: TObject); 
               private 
                 { Private declarations } 
                 procedure WMSysCommand(var Msg: TWMSysCommand); 
                   message WM_SYSCOMMAND; 
               public 
                 { Public declarations } 
               end; 
 
             var 
               Form1: TForm1; 
 
             implementation 
 
             {$R *.DFM} 
 
             const 
               SC_MyMenuItem = WM_USER + 1; 
 
             procedure TForm1.FormCreate(Sender: TObject); 
             begin 
               AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, ''); 
               AppendMenu(GetSystemMenu(Handle, FALSE), 
                          MF_STRING, 
                          SC_MyMenuItem, 
                          'My Menu Item'); 
             end; 
 
             procedure TForm1.WMSysCommand(var Msg: TWMSysCommand); 
             begin 
               if Msg.CmdType = SC_MyMenuItem then 
                 ShowMessage('Got the message') else 
                 inherited; 
             end; 
Добавил: casperof

В следующем примере создается процедура разбиения слов при переносах для TMemo. Заметьте, что реализованная процедура просто всегда разрешает перенос. Для дополнительной информации см.таже документацию к сообщению EM_SETWORDBREAKPROC.

 
              var 
               OriginalWordBreakProc : pointer; 
               NewWordBreakProc : pointer; 
 
             function MyWordBreakProc(LPTSTR  : pchar; 
                                      ichCurrent : integer; 
                                      cch : integer; 
                                      code  : integer) : integer 
                {$IFDEF WIN32} stdcall; {$ELSE} ; export; {$ENDIF} 
             begin 
               result :=  0; 
             end; 
 
             procedure TForm1.FormCreate(Sender: TObject); 
             begin 
               OriginalWordBreakProc := Pointer( 
                 SendMessage(Memo1.Handle, 
                             EM_GETWORDBREAKPROC, 
                             0, 
                             0)); 
              {$IFDEF WIN32} 
               NewWordBreakProc := @MyWordBreakProc; 
              {$ELSE} 
                NewWordBreakProc := MakeProcInstance(@MyWordBreakProc, 
                                                     hInstance); 
              {$ENDIF} 
               SendMessage(Memo1.Handle, 
                           EM_SETWORDBREAKPROC, 
                           0, 
                           longint(NewWordBreakProc)); 
 
             end; 
 
             procedure TForm1.FormDestroy(Sender: TObject); 
             begin 
               SendMessage(Memo1.Handle, 
                           EM_SETWORDBREAKPROC, 
                           0, 
                           longint(@OriginalWordBreakProc)); 
              {$IFNDEF WIN32} 
                FreeProcInstance(NewWordBreakProc); 
              {$ENDIF} 
             end; 
Добавил: casperof

В следующем примере используется функция SHFileOperation для копирования группы файлов и показа анимированного диалога. Вы можете использовать также следующие флаги для копирования, удаления, переноса и переименования файлов.

 
             TO_COPY 
             FO_DELETE 
             FO_MOVE 
             FO_RENAME 
 

Примечание: буфер, содержащий имена файлов для копирования должен заканчиваться двумя нулевыми символами.
Пример :

 
             uses ShellAPI;  
             procedure TForm1.Button1Click(Sender: TObject); 
             var 
              Fo      : TSHFileOpStruct; 
              buffer  : array[0..4096] of char; 
              p       : pchar; 
 
             begin 
               FillChar(Buffer, sizeof(Buffer), #0); 
               p := @buffer; 
               p := StrECopy(p, 'C:\DownLoad\1.ZIP') + 1; 
               p := StrECopy(p, 'C:\DownLoad\2.ZIP') + 1; 
               p := StrECopy(p, 'C:\DownLoad\3.ZIP') + 1; 
               StrECopy(p, 'C:\DownLoad\4.ZIP'); 
 
               FillChar(Fo, sizeof(Fo), #0); 
               Fo.Wnd    := Handle; 
               Fo.wFunc  := FO_COPY; 
               Fo.pFrom  := @Buffer; 
               Fo.pTo    := 'D:\'; 
               Fo.fFlags := 0; 
               if ((SHFileOperation(Fo) <> 0) or 
                   (Fo.fAnyOperationsAborted <> false)) then 
                 ShowMessage('Cancelled') 
             end; 
Добавил: casperof

Наш опрос
Сколько вам лет
Всего ответов: 20
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Поиск