В последнее время вижу многие хотя написать свой Mail агент на Delphi 7. Но не у всех это получается, потому что они что-то не понимают. Итак, приступим. Для начала нам нужно скомпилировать сам компонент MailClient. Качаем архив: mail-client-src.zip (27 Кб) (компонент работает только в Delphi 7). Затем в Delphi в меню Component / Install Component указываем путь к файлу client.pas, жмем ОК.
...
Читать дальше »
Категория:
Delphi
|
Просмотров:
1743
|
Добавил:
vavilov8
|
Дата:
26.12.2011
|
|
Если кому будет нужна реализация обновления ПО через Интернет — привожу код простого класса для обновления. Как всегда рекомендации и ругань — приветсвуются . В принципе ничего не мешает оформить этот класс как компонент или сделать классу обвязку. Code unit BDSInetUpdater;
interface Uses Classes,UrlMon,Windows,IniFiles;
type // событие, сигнализирующее о том, что есть обновленная версия TOnStartUpdate=procedure (Sender:TObject; var StartUpdate:boolean) of object; // событие при проверке обновленнной версии TOnAddUpdateInfoCheck=procedure (Sender:TObject; Inf:TIniFile; var CheckResult,ContinueCheck:boolean; var DownloadURL:string) of object; // событие при проверке версии TOnUpdateVersionInfo=procedure (Sender:TObject; Version:string) of object;
TInetUpdater=class private FUpdateInfoFile: string; FUpdateResultFile: string; FOnUpdateComplete: TNotifyEvent; FProductVersion:string; FProductName: string; FOnUpdateExists: TNotifyEvent; FOnStartUpdate: TOnStartUpdate; FOnAddUpInfoCheck: TOnAddUpdateInfoCheck; FOnUpdateVersionInfo: TOnUpdateVersionInfo; FInetResult:HRESULT; public Constructor Create; virtual; Destructor Destroy; override; // проверить обнвления и обновится при возможности function UpdateFile:boolean; virtual; // только проверить обновления function CheckUpdate(var DownloadURL:string):boolean; virtual; // получение кода при операциях с Инетом для разбора полетов property InetResult:HRESULT read FInetResult; // ссылка на файл с информацией об обновлениях property UpdateInfoFileURL:string read FUpdateInfoFile write FUpdateInfoFile; // временный файл для записи загруженного обновленного файла property UpdateResultFile:string read FUpdateResultFile write FUpdateResultFile; // наименование продукта property ProductName:string read FProductName write FProductName; // версия property ProductVersion:string read FProductVersion write FProductVersion; // событие, которое позволяет проверить дополнительныую информацию, используется для пользовательской проверки property OnAddUpdateInfoCheck:TOnAddUpdateInfoCheck read FOnAddUpInfoCheck write FOnAddUpInfoCheck; // событие при старте обновлений property OnUpdateStart:TOnStartUpdate read FOnStartUpdate write FOnStartUpdate; // событие при завершении обновления property OnUpdateComplete:TNotifyEvent read FOnUpdateComplete write FOnUpdateComplete; // событие о существовании обновления (т.е. информация об обновлениях загружена и новая версия найдена) property OnUpdateExists:TNotifyEvent read FOnUpdateExists write FOnUpdateExists; // событие при проверке версии property OnUpdateVersionInfo:TOnUpdateVersionInfo read FOnUpdateVersionInfo write FOnUpdateVersionInfo; end;
implementation Uses SysUtils;
// получить временное имя файла (тут возможна оптимизация, вместо времени можно например использовать GetTickCount()) Function GetTmpFileName:String; begin Result:=FormatDateTime('ddmmyyyyhhmmss',Now)+'.tmp'; end;
{ TInetUpdater }
function TInetUpdater.CheckUpdate(var DownloadURL:string): boolean; var S1,TmpFileName:string; Res:HRESULT; Inf:TIniFile; CheckResult,ContinueCheck:boolean; begin Result:=False; // проверим, есть ли адрес для файла с информацией об обновлениях if Trim(FUpdateInfoFile)='' then exit; // будем файл с информацией сохранять во временный файл TmpFileName:=ExtractFilePath(ParamStr(0))+ChangeFileExt(GetTmpFileName,'.ini'); // пытаемся получить информацию об обновлениях FInetResult:=UrlDownloadToFile(nil,PChar(FUpdateInfoFile),PChar(TmpFileName),0,nil); if FInetResult=S_OK then begin // ОК, файл с информацией получили, пробуем проверить новую версию if Assigned(FOnUpdateExists) then FOnUpdateExists(Self); // предполагается, что файл с информацией об обновлениях представляет собой обычный INI файл Inf:=TIniFile.Create(TmpFileName); try CheckResult:=False; ContinueCheck:=True; // здесь мы должны проверить информацию о версии, вызывая обработчик для OnAddUpInfoCheck(). // если ContinueCheck TRUE мы должны проверить версию сами в этом классе //(в ином случае получим результат в переменной CheckResult и не будем проверять версию самостоятельно) // Если файл с информацией НЕ INI файл - можем использовать свойство Inf.FileName // для получения имени временного файла и попробовать получить данные другим методом // в обработчике OnAddUpInfoCheck() if Assigned(FOnAddUpInfoCheck) then FOnAddUpInfoCheck(Self,Inf,CheckResult,ContinueCheck,DownloadURL); // Проверяем версию самостоятельно if ContinueCheck and Inf.SectionExists(FProductName) then begin // Читаем версию S1:=Trim(Inf.ReadString(FProductName,'Version',FProductVersion)); // событие о получении информации о версии if Assigned(FOnUpdateVersionInfo) then FOnUpdateVersionInfo(Self,S1); // Если версия не такая, как у нас => есть обновления Result:=(S1<>Trim(FProductVersion)); // соответсвенно, получим URL для обновленного файла if Result then DownloadURL:=Inf.ReadString(FProductName,'File',DownloadURL); end else Result:=CheckResult; finally Inf.Free; end; end; // временный файл нам уже не нужен - удаляем его if FileExists(TmpFileName) then SysUtils.DeleteFile(TmpFileName); end;
// первоначальная инициализация constructor TInetUpdater.Create; begin FUpdateInfoFile:='http://www.websitename.com/updates/verinfo.ini'; // URL к файлу с данными об обвлениях FUpdateResultFile:=''; // результирующий файл FProductName:=''; // имя продукта FProductVersion:='1.0.0.0'; // версия FOnUpdateComplete:=nil; FOnStartUpdate:=nil; FOnUpdateExists:=nil; FOnAddUpInfoCheck:=nil; FOnUpdateVersionInfo:=nil; FInetResult:=S_OK; end;
destructor TInetUpdater.Destroy; begin inherited; end;
// собственно обновление function TInetUpdater.UpdateFile; var Flag:boolean; DownloadURL:string; Res:HRESULT; begin Result:=False; // если мы не знаем, в какой файл сохранять обновления - они нам не нужны, уходим if Trim(FUpdateResultFile)='' then exit; DownloadURL:=''; // пробуем проверить обновления и получить URL для скачивания if CheckUpdate(DownloadURL) then begin if Trim(DownloadURL)='' then exit; // обновления есть, но вот URL для скачивания не получили - уходим Flag:=True; if Assigned(FOnStartUpdate) then FOnStartUpdate(Self,Flag); // сигнализируем, что начали процесс обновления // в переменной Flag - согласие на закачку ответ пользователя if Flag then // если закачка разрешена - качаем begin FInetResult:=UrlDownloadToFile(nil,PChar(DownloadURL),PChar(FUpdateResultFile),0,nil); Result:=FInetResult=S_OK; // если закачка обновления прошла нормально - сигнализируем, что все прошло удачно if Result and Assigned(FOnUpdateComplete) then FOnUpdateComplete(Self); end; end; end;
end. Пример использования: 1) размещаем на своем сайте обычный Ini файл updates.ini со следующей информацией:
Категория:
Delphi
|
Просмотров:
2757
|
Добавил:
vavilov8
|
Дата:
07.11.2011
|
|
Не знаю почему, но у многих новичков возникает вопрос о том: как создать гиперссылку в своей программе ! Поэтому с целью уменьшить количество таких вопросов я создал этот урок. Ну что ж давайте начинать: 1. Открываем Delphi, создаем новый проект на форму кидаем компонент, label с закладки standard. Сразу же давайте изменим у него цвет и размер шрифта. Делается это все в свойстве Font. Цвет я поставил синий, а шрифт сделал жирным, далее в свойстве Cursor компонента Label выберите crHandPoint Делается это для того что бы при наведении на ссылку курсор приобретал форму пальчика. 2. Так теперь нам нужно указать Адрес Web ресурса на который будет попадать пользователь при клике по ссылке. Адрес будем указывать в свойстве Hint компонента Label. Т.Е прописываем там например http://my-programm.ucoz.net/
...
Читать дальше »
Категория:
Delphi
|
Просмотров:
669
|
Добавил:
vavilov8
|
Дата:
09.10.2011
|
|
Основные функции библиотеки BASS: function BASS_Init(device: Integer; freq, flags: DWORD; win: HWND; clsid: PGUID): BOOL; Иницилаизирует звуковой поток Пример использования: BASS_Init(-1, 44100, 0, handle, nil); function BASS_StreamFree(handle: HSTREAM): BOOL - Очищает звуковой поток, в скобках указываем имя потока. function BASS_StreamCreateFile(mem: BOOL; f: Pointer; offset, length: QWORD; flags: DWORD): HSTREAM; - Создаем звуковой поток из локального файла Пример использования Имя потока := Bass_streamCreateFile(false, PChar('C:\muzic.mp3'),0,0,0);
...
Читать дальше »
Категория:
Delphi
|
Просмотров:
712
|
Добавил:
vavilov8
|
Дата:
09.10.2011
|
|
Сегодня мы научимся сохранять исходник HTML из TWebBrowser.Document на диск. Делается это очень просто и я думаю трудностей с этим у вас возникнуть недолжно. Ну что поехали, как всегда для начала открываем Delphi и первое что нам нужно будет сделать это дописать в раздел uses ActiveX. Двигаемся дальше теперь кидаем на форму две кнопочки (button) с закладки standart, компонент SaveDialog с закладки Dialog и компонент webBrowser с закладки internet. Так с компонентами вроде разобрались Создаем обработчик событий(onclick) на первой кнопке и в нем прописываем следующий код: Code webbrowser1.Navigate('http://my-programm.ucoz.net/');
...
Читать дальше »
Категория:
Delphi
|
Просмотров:
685
|
Добавил:
vavilov8
|
Дата:
08.10.2011
|
|
Сейчас я покажу вам, как сделать так чтобы при нажатии на крестик (закрытии главной формы), программа не закрывалась, а просто сворачивалась. Сам код займет всего две строчки. Итак, создаем обработчик событий OnClose на главной форме и прописываем там следующий код: Code Action := caNone; Application.Minimize; Code procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caNone; Application.Minimize; end;
Категория:
Delphi
|
Просмотров:
505
|
Добавил:
vavilov8
|
Дата:
08.10.2011
|
|
Сейчас я хочу показать вам как на Delphi быстро и без использования компонентов узнать информацию о системе. Для начала создадим новую форму и бросим на неё: компонент Button (кнопка) и компонент Memo (многострочный редактор) оба с закладки Standart. После чего в обработчик кнопки вставляем следующий код:
...
Читать дальше »
Категория:
Delphi
|
Просмотров:
487
|
Добавил:
vavilov8
|
Дата:
08.10.2011
|
| |