Четверг, 04.06.2020, 19:25
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Delphi [12]
С++ [0]
С# [1]
PHP [7]
Мини-чат
Наш опрос
Оцените мой сайт
Всего ответов: 23
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Delphi


В последнее время вижу многие хотя написать свой Mail агент на Delphi 7. Но не у всех это получается, потому что они что-то не понимают.

Итак, приступим. Для начала нам нужно скомпилировать сам компонент MailClient. Качаем архив: mail-client-src.zip (27 Кб) (компонент работает только в Delphi 7).

Затем в Delphi в меню Component / Install Component указываем путь к файлу client.pas, жмем ОК. ... Читать дальше »
Категория: Delphi | Просмотров: 1376 | Добавил: vavilov8 | Дата: 26.12.2011 | Комментарии (0)

Если кому будет нужна реализация обновления ПО через Интернет — привожу код простого класса для обновления. Как всегда рекомендации и ругань — приветсвуются .
В принципе ничего не мешает оформить этот класс как компонент или сделать классу обвязку.

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 | Просмотров: 2434 | Добавил: vavilov8 | Дата: 07.11.2011 | Комментарии (2)

Не знаю почему, но у многих новичков возникает вопрос о том: как создать гиперссылку в своей программе ! Поэтому с целью уменьшить количество таких вопросов я создал этот урок. Ну что ж давайте начинать:

1. Открываем Delphi, создаем новый проект на форму кидаем компонент, label с закладки standard. Сразу же давайте изменим у него цвет и размер шрифта. Делается это все в свойстве Font. Цвет я поставил синий, а шрифт сделал жирным, далее в свойстве Cursor компонента Label выберите crHandPoint Делается это для того что бы при наведении на ссылку курсор приобретал форму пальчика.

2. Так теперь нам нужно указать Адрес Web ресурса на который будет попадать пользователь при клике по ссылке. Адрес будем указывать в свойстве Hint компонента Label. Т.Е прописываем там например http://my-programm.ucoz.net/

... Читать дальше »

Категория: Delphi | Просмотров: 391 | Добавил: vavilov8 | Дата: 09.10.2011 | Комментарии (0)

Основные функции библиотеки 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 | Просмотров: 505 | Добавил: vavilov8 | Дата: 09.10.2011 | Комментарии (0)



Сегодня мы научимся сохранять исходник HTML из TWebBrowser.Document на диск. Делается это очень просто и я думаю трудностей с этим у вас возникнуть недолжно.

Ну что поехали, как всегда для начала открываем Delphi и первое что нам нужно будет сделать это дописать в раздел uses ActiveX. Двигаемся дальше теперь кидаем на форму две кнопочки (button) с закладки standart, компонент SaveDialog с закладки Dialog и компонент webBrowser с закладки internet. Так с компонентами вроде разобрались

Создаем обработчик событий(onclick) на первой кнопке и в нем прописываем следующий код:
Code
webbrowser1.Navigate('http://my-programm.ucoz.net/');

... Читать дальше »
Категория: Delphi | Просмотров: 496 | Добавил: vavilov8 | Дата: 08.10.2011 | Комментарии (0)

Сейчас я покажу вам, как сделать так чтобы при нажатии на крестик (закрытии главной формы), программа не закрывалась, а просто сворачивалась. Сам код займет всего две строчки. Итак, создаем обработчик событий OnClose на главной форме и прописываем там следующий код:

Code

Action := caNone;
Application.Minimize;


Code

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Application.Minimize;
end;
Категория: Delphi | Просмотров: 324 | Добавил: vavilov8 | Дата: 08.10.2011 | Комментарии (0)

Сейчас я хочу показать вам как на Delphi быстро и без использования компонентов узнать информацию о системе. Для начала создадим новую форму и бросим на неё: компонент Button (кнопка) и компонент Memo (многострочный редактор) оба с закладки Standart. После чего в обработчик кнопки вставляем следующий код:

... Читать дальше »

Категория: Delphi | Просмотров: 315 | Добавил: vavilov8 | Дата: 08.10.2011 | Комментарии (0)

1 2 »