Create site free
FAQ по Delphi - Программирование - Компьютеры, телекоммуникации, ПО... - Форум
 

Страница 1 из 3123»
Форум » Компьютеры, телекоммуникации, ПО... » Программирование » FAQ по Delphi
FAQ по Delphi
Vovich Дата: Четверг, 29.04.2010, 00:16 | Сообщение # 1
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline















 
Vovich Дата: Четверг, 29.04.2010, 08:40 | Сообщение # 2
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Как работать с файлами архивов, хотя бы самыми распространенными?

Воспользуйтесь библиотекой ExceedZip 3.0 (http://www.exceedsoft.com).
Или воспользуйтесь библиотекой компонентов ZipTV(www.zipTV.com)
UnRAR - DLL + Делфи - исходники для работы с ней:
ftp://www.rarsoft.com/rar/UnrarSrc.rar
ftp://www.rarsoft.com/rar/UnRARDLL.exe


 
Vovich Дата: Четверг, 29.04.2010, 08:41 | Сообщение # 3
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Как узнать путь к папке где храняться временные файлы?

Code
function TempPath:String;
var
i:integer;
begin
SetLength(Result,MAX_PATH);
i:=GetTempPath(Length(Result),PChar(Result));
SetLength(Result,i);
end;



 
Vovich Дата: Четверг, 29.04.2010, 08:43 | Сообщение # 4
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Перехват нажатия клавиши PrintSreen в Windows, или просто говоря чтобы по нажатии PrintSreen срабатывала некая подпрограмма

мне надо сделаь перехват нажатия клавиши PrintSreen в Windows, или просто говоря чтобы по нажатии PrintSreen
срабатывала некая подпрогра, нужно чтобы подпрогра выполнялась один раз при каждом нажатии на клавишу даже если зажать кнопку. Тут небольшой пример. В нем регистрируется HotKey
И если будет нажата, то выведется GotIt

Code
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

const id_SnapShot = 101;

procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if Msg.HotKey = id_SnapShot then
ShowMessage('GotIt');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Form1.Handle,
id_SnapShot,
0,
VK_SNAPSHOT);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey (Form1.Handle, id_SnapShot);
end;



 
Vovich Дата: Четверг, 29.04.2010, 08:53 | Сообщение # 5
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Мне необходима задержка (по типу Delay'я в Паскале). Может надо использовать Timer?

Code
sleep(count:miliseconds);
или таймер Timer1.Interval:=задержка;
Timer1.Enabled:=true;
Событие OnTimer произойдёт после прохождения интервала.
Оно будет происходить, пока Timer1.Enabled:=false



 
Vovich Дата: Четверг, 29.04.2010, 08:54 | Сообщение # 6
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


В приложении пример использования MAPI. В нём показаны процедуры и функции отправки писем.

В приложении пример использования MAPI.В нём показаны процедуры и функции отправки пискм.
(Также можно использовать спечиальные компоненты)

Code
unit MapiControl;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
   { Вводим новый тип события для получения Errorcode }
   TMapiErrEvent = procedure(Sender: TObject; ErrCode: Integer) of object;

   TMapiControl = class(TComponent)
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
   private
     { Private-объявления }
     FSubject: string;
     FMailtext: string;
     FFromName: string;
     FFromAdress: string;
     FTOAdr: TStrings;
     FCCAdr: TStrings;
     FBCCAdr: TStrings;
     FAttachedFileName: TStrings;
     FDisplayFileName: TStrings;
     FShowDialog: Boolean;
     FUseAppHandle: Boolean;
     { Error Events: }
     FOnUserAbort: TNotifyEvent;
     FOnMapiError: TMapiErrEvent;
     FOnSuccess: TNotifyEvent;
     { +>  Изменения, внесённые Eugene Mayevski [mailto:Mayevski@eldos.org]}
     procedure SetToAddr(newValue : TStrings);
     procedure SetCCAddr(newValue : TStrings);
     procedure SetBCCAddr(newValue : TStrings);
     procedure SetAttachedFileName(newValue : TStrings);
     { +<  конец изменений }
   protected
     { Protected-объявления }
   public
     { Public-объявления }
     ApplicationHandle: THandle;
     procedure Sendmail();
     procedure Reset();
   published
     { Published-объявления }
     property Subject: string read FSubject write FSubject;
     property Body: string read FMailText write FMailText;
     property FromName: string read FFromName write FFromName;
     property FromAdress: string read FFromAdress write FFromAdress;
     property Recipients: TStrings read FTOAdr write SetTOAddr;
     property CopyTo: TStrings read FCCAdr write SetCCAddr;
     property BlindCopyTo: TStrings read FBCCAdr write SetBCCAddr;
     property AttachedFiles: TStrings read FAttachedFileName write SetAttachedFileName;
     property DisplayFileName: TStrings read FDisplayFileName;
     property ShowDialog: Boolean read FShowDialog write FShowDialog;
     property UseAppHandle: Boolean read FUseAppHandle write FUseAppHandle;

     { события: }
     property OnUserAbort: TNotifyEvent read FOnUserAbort write FOnUserAbort;
     property OnMapiError: TMapiErrEvent read FOnMapiError write FOnMapiError;
     property OnSuccess: TNotifyEvent read FOnSuccess write FOnSuccess;
   end;

procedure Register;

implementation

uses Mapi;

{ регистрируем компонент: }
procedure Register;
begin
   RegisterComponents('expectIT', [TMapiControl]);
end;

{ TMapiControl }

constructor TMapiControl.Create(AOwner: TComponent);
begin
   inherited Create(AOwner);
   FOnUserAbort := nil;
   FOnMapiError := nil;
   FOnSuccess := nil;
   FSubject := '';
   FMailtext := '';
   FFromName := '';
   FFromAdress := '';
   FTOAdr := TStringList.Create;
   FCCAdr := TStringList.Create;
   FBCCAdr := TStringList.Create;
   FAttachedFileName := TStringList.Create;
   FDisplayFileName := TStringList.Create;
   FShowDialog := False;
   ApplicationHandle := Application.Handle;
end;

{ +>  Изменения, внесённые Eugene Mayevski [mailto:Mayevski@eldos.org]}
procedure TMapiControl.SetToAddr(newValue : TStrings);
begin
   FToAdr.Assign(newValue);
end;

procedure TMapiControl.SetCCAddr(newValue : TStrings);
begin
   FCCAdr.Assign(newValue);
end;

procedure TMapiControl.SetBCCAddr(newValue : TStrings);
begin
   FBCCAdr.Assign(newValue);
end;

procedure TMapiControl.SetAttachedFileName(newValue : TStrings);
begin
   FAttachedFileName.Assign(newValue);
end;
{ +<  конец изменений }

destructor TMapiControl.Destroy;
begin
   FTOAdr.Free;
   FCCAdr.Free;
   FBCCAdr.Free;
   FAttachedFileName.Free;
   FDisplayFileName.Free;
   inherited destroy;
end;

{ Сбрасываем все используемые поля}
procedure TMapiControl.Reset;
begin
   FSubject := '';
   FMailtext := '';
   FFromName := '';
   FFromAdress := '';
   FTOAdr.Clear;
   FCCAdr.Clear;
   FBCCAdr.Clear;
   FAttachedFileName.Clear;
   FDisplayFileName.Clear;
end;

{  Эта процедура составляет и отправляет Email }
procedure TMapiControl.Sendmail;
var
   MapiMessage: TMapiMessage;
   MError: Cardinal;
   Sender: TMapiRecipDesc;
   PRecip, Recipients: PMapiRecipDesc;
   PFiles, Attachments: PMapiFileDesc;
   i: Integer;
   AppHandle: THandle;
begin
   { Перво-наперво сохраняем Handle приложения, if not
     the Component might fail to send the Email or
     your calling Program gets locked up. }
   AppHandle := Application.Handle;

   { Нам нужно зарезервировать память для всех получателей }
   MapiMessage.nRecipCount := FTOAdr.Count + FCCAdr.Count + FBCCAdr.Count;
   GetMem(Recipients, MapiMessage.nRecipCount * sizeof(TMapiRecipDesc));
   try
     with MapiMessage do
     begin
       ulReserved := 0;
       { Устанавливаем поле Subject: }
       lpszSubject := PChar(Self.FSubject);

       { ...  Body: }
       lpszNoteText := PChar(FMailText);

       lpszMessageType := nil;
       lpszDateReceived := nil;
       lpszConversationID := nil;
       flFlags := 0;

       { и отправителя: (MAPI_ORIG) }
       Sender.ulReserved := 0;
       Sender.ulRecipClass := MAPI_ORIG;
       Sender.lpszName := PChar(FromName);
       Sender.lpszAddress := PChar(FromAdress);
       Sender.ulEIDSize := 0;
       Sender.lpEntryID := nil;
       lpOriginator := @Sender;

       PRecip := Recipients;

       { У нас много получателей письма: (MAPI_TO)
         установим для каждого: }
       if nRecipCount >  0 then
       begin
         for i := 1 to FTOAdr.Count do
         begin
           PRecip^.ulReserved := 0;
           PRecip^.ulRecipClass := MAPI_TO;
           { lpszName should carry the Name like in the
             contacts or the adress book, I will take the
             email adress to keep it short: }
           PRecip^.lpszName := PChar(FTOAdr.Strings[i - 1]);
           { Если Вы используете этот компонент совместно с Outlook97 или 2000
             (не Express версии) , то Вам прийдётся добавить
             'SMTP:' в начало каждого (email-) адреса.
           }
           PRecip^.lpszAddress := PChar('SMTP:' + FTOAdr.Strings[i - 1]);
           PRecip^.ulEIDSize := 0;
           PRecip^.lpEntryID := nil;
           Inc(PRecip);
         end;

         { То же самое проделываем с получателями копии письма: (CC, MAPI_CC) }
         for i := 1 to FCCAdr.Count do
         begin
           PRecip^.ulReserved := 0;
           PRecip^.ulRecipClass := MAPI_CC;
           PRecip^.lpszName := PChar(FCCAdr.Strings[i - 1]);
           PRecip^.lpszAddress := PChar('SMTP:' + FCCAdr.Strings[i - 1]);
           PRecip^.ulEIDSize := 0;
           PRecip^.lpEntryID := nil;
           Inc(PRecip);
         end;

         { ... тоже самое для Bcc: (BCC, MAPI_BCC) }
         for i := 1 to FBCCAdr.Count do
         begin
           PRecip^.ulReserved := 0;
           PRecip^.ulRecipClass := MAPI_BCC;
           PRecip^.lpszName := PChar(FBCCAdr.Strings[i - 1]);
           PRecip^.lpszAddress := PChar('SMTP:' + FBCCAdr.Strings[i - 1]);
           PRecip^.ulEIDSize := 0;
           PRecip^.lpEntryID := nil;
           Inc(PRecip);
         end;
       end;
       lpRecips := Recipients;

       { Теперь обработаем прикреплённые к письму файлы: }

       if FAttachedFileName.Count >  0 then
       begin
         nFileCount := FAttachedFileName.Count;
         GetMem(Attachments, MapiMessage.nFileCount * sizeof(TMapiFileDesc));

         PFiles := Attachments;

         { Во первых установим отображаемые на экране имена файлов (без пути): }
         FDisplayFileName.Clear;
         for i := 0 to FAttachedFileName.Count - 1 do
           FDisplayFileName.Add(ExtractFileName(FAttachedFileName[i]));

         if nFileCount >  0 then
         begin
           { Теперь составим структурку для прикреплённого файла: }
           for i := 1 to FAttachedFileName.Count do
           begin
             { Устанавливаем полный путь }
             Attachments^.lpszPathName := PChar(FAttachedFileName.Strings[i - 1]);
             { ... и имя, отображаемое на дисплее: }
             Attachments^.lpszFileName := PChar(FDisplayFileName.Strings[i - 1]);
             Attachments^.ulReserved := 0;
             Attachments^.flFlags := 0;
             { Положение должно быть -1, за разьяснениями обращайтесь в WinApi Help. }
             Attachments^.nPosition := Cardinal(-1);
             Attachments^.lpFileType := nil;
             Inc(Attachments);
           end;
         end;
         lpFiles := PFiles;
       end
       else
       begin
         nFileCount := 0;
         lpFiles := nil;
       end;
     end;

     if FShowDialog then
       MError := MapiSendMail(0, AppHandle, MapiMessage,
       MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0)
     else
       MError := MapiSendMail(0, AppHandle, MapiMessage, 0, 0);

     case MError of
       MAPI_E_USER_ABORT:
         begin
           if Assigned(FOnUserAbort) then
             FOnUserAbort(Self);
         end;
       SUCCESS_SUCCESS:
         begin
           if Assigned(FOnSuccess) then
             FOnSuccess(Self);
         end
     else  
begin
         if Assigned(FOnMapiError) then
           FOnMapiError(Self, MError);
       end;

     end;
   finally
     { В заключение освобождаем память }
     FreeMem(Recipients, MapiMessage.nRecipCount * sizeof(TMapiRecipDesc));
   end;
end;

end.



 
Vovich Дата: Четверг, 29.04.2010, 08:55 | Сообщение # 7
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Можно ли динамически менять какая форма считается главной в приложении во время работы программы?

Можно, но только во время загрузки приложения. Чтобы сделать это выберите " View-> Project Source" и измените код инициализации приложения, так что порядок создания форм зависил от какого-то условия.
Примечание:
Вам придется редактировать этот код, если Вы добавите в приложение новые формы.

Code
begin
Application.Initialize;
if < какое-то условие>  then
begin
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
end
else
begin
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1,Form1);
end;
end.
Application.Run;



 
Vovich Дата: Четверг, 29.04.2010, 08:56 | Сообщение # 8
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Каким образом можно во время выполнения программы создавать произвольные объекты
(label, Image, CheckBox и пр.) на форме?

Code
var
TempButton : TButton;  { Это только указатель на TButton }
begin
TempButton := TButton.Create(Self);  { Назначаем владельца форму }
TempButton.Parent := Self;   { Должны назначить Parent (родителя) }
TempButton.Caption := 'Время выполнения';    { Устанавливаем здесь свойства }
TempButton.Visible := True;   { Показываем кнопку }
end;



 
Vovich Дата: Четверг, 29.04.2010, 08:57 | Сообщение # 9
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Как определить установлен ли на компьютере Word, запустить его и загрузить в него текст из программы?

Пример:

Code
var MsWord: Variant;
...
try
// Если Word уже запущен
MsWord := GetActiveOleObject('Word.Application'); // Взять ссылку на запущенный OLE объект
except
try
  // Word не запущен, запустить
MsWord := CreateOleObject('Word.Application');  // Создать ссылку на зарегистрированный OLE объект
MsWord.Visible := True;
except
ShowMessage('Не могу запустить Microsoft Word');
Exit;
end;
end;
end;
...

MSWord.Documents.Add; // Создать новый документ
MsWord.Selection.Font.Bold := True; // Установить жирный шрифт
MsWord.Selection.Font.Size := 12; // установить 12 кегль
MsWord.Selection.TypeText('Текст');



 
Vovich Дата: Четверг, 29.04.2010, 08:57 | Сообщение # 10
Люблю и это здорово!
Группа: Администраторы
ICQ: 380341657
Сообщений: 1010
Статус: Offline


Как засунуть свою прогу в меню "Открыть с помощью"

Code
uses
ShellApi;
...
ShellExecute(0,'open','rundll32.exe',PChar(Format('shell32.dll,
OpenAs_RunDLL %s',[FileName])),nil,SW_SHOW);
...

Где FileName - имя файла к которому ты хочешь применить эту ф-цию...


 
Форум » Компьютеры, телекоммуникации, ПО... » Программирование » FAQ по Delphi
Страница 1 из 3123»
Поиск: