Блог по программированию в среде Delphi

Поиск по блогу

Есть идея по созданию интересной программы?

Опиши тут и я по возможности постараюсь это реализовать специально для тебя! Без $ ))
Показаны сообщения с ярлыком Исходник. Показать все сообщения
Показаны сообщения с ярлыком Исходник. Показать все сообщения

понедельник, 9 июля 2012 г.

Удаление истории статусов из блога mblogi.qip

После того как случайно наткнулся на историю статусов квипа решил по удалять их, но дело это оказалось весьма муторным в связи с тормозами сайта. Стало лень, а лень-это двигатель прогресса написал вот такую утилиту для этого дела. Программа удаляет все сообщения из блога  mblogi.qip собственно я и не знал, что у меня там блог ведется)) и решил почистить инет от говна))

Исходный код программы представлен ниже:

понедельник, 23 апреля 2012 г.

OnClick WebBrowser

Автор: James D. Rofka
 
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  protected
    procedure MyMessages(var Msg: TMsg; var Handled: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := MyMessages;
end;

procedure TForm1.MyMessages(var Msg: TMsg; var Handled: Boolean);
var
  X, Y: Integer;
  document, E: OleVariant;
begin
  Handled := False;
  if (WebBrowser1 = nil) or (Msg.message <> WM_LBUTTONDOWN) then
    Exit;

  Handled := IsDialogMessage(WebBrowser1.Handle, Msg);

  if (Handled) then
  begin
    case (Msg.message) of
      WM_LBUTTONDOWN:
        begin
          X := LOWORD(Msg.lParam);
          Y := HIWORD(Msg.lParam);
//          document := WebBrowser1.document;
//          E := document.elementFromPoint(X, Y);
          ShowMessage('You clicked on:' + #10);// + E.outerHTML);
        end;
    end;
  end;
end;

воскресенье, 22 января 2012 г.

GIF с прозрачным фоном в BMP (Delphi)

var
  gif:TGIFImage;
  i:Integer;
begin
  gif:=TGIFImage.Create;
  gif.Transparent:=True;
  gif.LoadFromFile('c:\1\2.gif');
  for i := 0 to gif.Images.Count-1 do
  begin
    with GIF.Images[i] do
      if (Transparent) then
      begin
        ActiveColorMap[GraphicControlExtension.TransparentColorIndex] := clWhite;
        GIF.Images[i].Bitmap.SaveToFile('c:\1\'+inttostr(i)+'.bmp');
      end;
  end;
  gif.Free;

анимированные изображения разбивает на кадры

четверг, 31 марта 2011 г.

Стеклянная кнопка rkGlassButton (Delphi)

Компонент стеклянная кнопка для Delphi (устанавливал в Delphi XE версию 2 при перемещении бывают глюки, но это не беда компонент идет в исходниках в виде одного pas файла. Так что если есть желание и время можно это глюк пофиксить)

Скрин  rkGlassButton 2



История развития компонента rkGlassButton 1.5
  • Стал лучше рендеринг
  • Теперь компонент может отбрасывать тени
  • Можно изменить цвет тени
  • Регулируется уровень глянцевости
  • Изменение позиции изображения и разрыва текста
  • Работает как кнопки в Windows 7
История развития компонента rkGlassButton 1.75
  • Добавлена обработка клавиатуры
  • Добавлена стрелочка при нажатии которой появляется Pop up Menu
  • Новый фокус рендеринга
  • Добавлено состояние нажата
  • Пофиксены некоторые ошибки

История развития компонента rkGlassButton 2
  • Добавлено позиционирование текста (слева, по центру, справа)
  • Кнопка может быть плоской (Flat)
  • Альтернативный рендеринг стиль
  • Появилась возможность отключения кнопки

Распространяется по лицензии MPL 1.1

Блог автора компонента
Klever on Delphi

Скачать компонент можно отсюда Download

среда, 30 марта 2011 г.

DSpack 2.3.3 (Delphi)

Компонент для написания мультимедиа приложений использующих MS Direct Show и DirectX технологии. С DSpack вы можете создать все, что вы хотите: DVD, захвата, сжатие, фильтры, ТВ, веб-камера, DV... 
Корректно работает в Delphi XE, для работы примеров необходимо переименовать в uses DSUtil.pas на DSUtils.pas (в Delphi 2009 появился другой модуль с таким именем)
Запустил пример который поток видео с веб-камеры сохраняет на диск в формате avi, после чего открыл файл и в нем было действительно видео с веб-камеры, а не просто пустой файл. 


Установка

Добавляем в переменные среды Delphi
       - (DSPackDir)\src\Directx9
       - (DSPackDir)\src\DSPack
Компилируем DirectX 9 Package (DirectX9_Dx.dpk) из папки packagesD2010.
Компилируем  DSPack Package (DSPack_Dx.dpk) из папки packagesD2010.
Устанавливаем Design Package (DSPackDesign_Dx.dpk) из папки packagesD2010.

И не забываем в примерах в случае если возникает ошибка
[DCC Error] main.pas(34): E2003 Undeclared identifier: 'TSysDevEnum'
переименовывать модуль DSUtil.pas на DSUtils.pas

Скачать DSpack можно отсюда Download

вторник, 29 марта 2011 г.

JSON – SuperObject (Delphi)

 JSON – SuperObject библиотека для работы с JSON в Delphi, данная библиотека была проверена в Delphi 2010, всё прекрасно работает! Недавно был пост посвященный подобной библиотеке, но по функционалу и стабильности работы, она не показала себя с хорошей стороны в отличие от этой библиотеки.

Особенности:
  • Быстрота анализа
  • XML в JSON
  • Простота использования
  • Проверка валидности JSON
  • JSON-RPC (Remote Procedure Call (вызов удалённых процедур)).
  • Возможность написания JSON в удобной для человека форме.
Лицензия:
MPL или LGPL

Сайт автора компонента:
Delphi & Free Pascal ressources by Henri Gourvest


SVN:
http://superobject.googlecode.com/svn/trunk/


Скачать архив от 29.03.2010 отсюда Download

воскресенье, 27 февраля 2011 г.

Функция получения PageRank (Delphi)


Ни так давно захотел определить PR блога без SEO сервисов с помощью Delphi.
Все оказалось ни так просто, как на Yandex'e при определении ТИЦ'а. Чтобы получить ТИЦ для тех, кто не знает или просто ни когда об этом, ни задумывался, необходимо выполнить запрос такого вида:
http://search.yaca.yandex.ru/yca/cy/ch/[URL сайта без http:\\]/

Пример:
http://search.yaca.yandex.ru/yca/cy/ch/nmdsoft.blogspot.com/
 

и немного распарсить страницу и получим искомый нами ТИЦ

четверг, 24 февраля 2011 г.

Класс для работы с JSON в Delphi


JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми.

Класс lkJSON для работы с  универсальными структурами данных (JSON ) в среде Delphi. Проверял на работоспособность в среде Delphi 2010, все прекрасно работает, в комплекте с классом идут примеры, посмотрев которые можно легко понять, что к чему, так же класс идет в исходном коде и  его можно доработать для своих целей.

среда, 29 декабря 2010 г.

Простенький пример выполнения запроса в Wininet

По просьбе трудящихся выкладываю вот такой простенький исходник программки с помощью, которой можно получить ТИЦ и PR  сайта путем выполнения POST запроса

Скрин примера



unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,WinInet, StdCtrls;

type
  TfrmMain = class(TForm)
    Button1: TButton;
    edtSite: TEdit;
    lblTC_PR: TLabel;
    lblSite: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}
const
  // дефолное название приложение через которое якобы происходит соединение
  DefaultAppName ='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6';

function exam(msData: TMemoryStream):string;
  function DataAvailable(hRequest: pointer; out Size: cardinal): BOOLEAN;
  begin
    Result := WinInet.InternetQueryDataAvailable(hRequest, Size, 0, 0);
  end;
var
  hInternet, hConnect, hRequest: pointer;
  dwBytesRead, i, L: cardinal;
  sTemp: AnsiString; // текст страницы
  sHeader: String;
begin
  Result:='';
  try
    hInternet := InternetOpen(PChar(DefaultAppName),INTERNET_OPEN_TYPE_PRECONFIG, Nil, Nil, 0);
    if Assigned(hInternet) then
    begin
      // Открываем сессию
      //http://ip-whois.net/pr_cy_check.php обратите внимание как записал в коде адрес сайта
      hConnect := InternetConnect(hInternet, PWideChar('ip-whois.net'),INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 1);
      if Assigned(hConnect) then
      begin
        // открываем запрос
        hRequest := HttpOpenRequest(hConnect, PWideChar('POST'),
          PWideChar('/pr_cy_check.php'), HTTP_VERSION, nil, Nil,
          INTERNET_FLAG_KEEP_CONNECTION, 1);

        sHeader:='Accept: */*';
        HttpAddRequestHeaders(hRequest, Pointer(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD);
        sHeader:= 'Content-Type: application/x-www-form-urlencoded';
        HttpAddRequestHeaders(hRequest, Pointer(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD);
        sHeader:= 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
        HttpAddRequestHeaders(hRequest, Pointer(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD);
        sHeader:= 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7';
        HttpAddRequestHeaders(hRequest, Pointer(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD);

        if Assigned(hRequest) then
        begin
          // Отправляем запрос
          i := 1;
          if HttpSendRequest(hRequest, nil, 0, msData.memory, msData.Size) then
          begin
            repeat
              DataAvailable(hRequest, L); // Получаем кол-во принимаемых данных
              if L = 0 then
                break;
              SetLength(sTemp, L + i);
              if not InternetReadFile(hRequest, @sTemp[i], sizeof(L),dwBytesRead) then
                break; // Получаем данные с сервера
              inc(i, dwBytesRead);
            until dwBytesRead = 0;
            sTemp[i] := #0;
            Result:=sTemp;
          end;
        end;
      end;
    end;
  finally
    InternetCloseHandle(hRequest);
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hInternet);
  end;
end;

function TC_PR(aValue:string):string;
var
  i:Integer;
  TC,PR:string;
begin
  i:=AnsiPos('</h2><h3>ТИЦ: ',aValue);
  if i=0 then
  begin
    Result:='Неизвестно!';
    Exit;
  end;
  Delete(aValue,1,i+length('</h2><h3>ТИЦ: ')-1);
  i:=AnsiPos('</h3><h3>PR: ',aValue);
  TC:=Copy(aValue,0,i-1);
  Delete(aValue,1,i+length('</h3><h3>PR: ')-1);
  i:=AnsiPos('</h3><br>',aValue);
  PR:=Copy(aValue,0,i-1);
  Result:='ТИЦ '+TC+' PR '+PR;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
var
  zapros:TStringStream;
  sTemp:string;
begin
  zapros:=TStringStream.Create;
  zapros.WriteString('T1='+edtSite.Text+'&B1=T2=%D3%E7%ED%E0%F2%FC+%D2%C8%D6+%E8+PR');
  sTemp:=exam(zapros);
  if Length(sTemp)>0 then
    lblTC_PR.Caption:=TC_PR(sTemp);

  zapros.Free;
end;

end.

Скачать исходник проекта можно отсюда Download

четверг, 18 ноября 2010 г.

Создание именованной, совместно используемой памяти (Delphi)

Отображение файла в память для совместного использования несколькими процессами.



Первый процесс создает файл Temp.txt, после чего проецирует его в память

//первый процесс
unit mainServ;

interface

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

вторник, 12 октября 2010 г.

Counter-Strike informer for Delphi


Получение информации о текущем состоянии сервера Counter-Strike в сети по средством выполнения Udp запроса.
Основная сложность состояла в разборе ответа сервера.


Проверял на работоспособность на серверах использующий 37 протокол, а на 47, 48 не проверял.

четверг, 26 августа 2010 г.

Remote Registry (Удаленное редактирование реестра) Delphi

Просто для прикола над другом решил написать программку редактирования реестра у него на компе, основная ее часть заключается в подключении к компу жертвы и естественно получение прав на редактирование. Так как я знаю пароль админа домена мне это не составило труда))
Всегда ему говорил же отключай ты службу удаленного реестра, ну вот не слушался))

procedure TForm1.Button2Click(Sender: TObject);
var
  UserName,Password,DomainName:PAnsiChar;
  tolken:THandle;
  vReg: TRegistry;
begin
  UserName:='Логин';
  Password:='Пароль';
  DomainName:='Домен к которому принадлежит ПК';
  //коннектимся к компу
  try
    if LogonUser(UserName,DomainName,Password,LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,tolken) then
    begin
      Beep;
      ImpersonateLoggedOnUser(tolken);
      vReg := TRegistry.Create(KEY_ALL_ACCESS);
      try
        vReg.RootKey := HKEY_CURRENT_USER;
        if vReg.RegistryConnect('\\noname') then //если не указать имя пк то редактирование будет происходить на локальном ПК будьте бдительны
        begin
          vReg.OpenKey('Control Panel\Mouse',False);
          Memo1.Lines.add('До: '+vReg.ReadString('MouseSensitivity'));

          vReg.WriteString('MouseSensitivity','20');
          Memo1.Lines.add('После: '+vReg.ReadString('MouseSensitivity'));

          vReg.CloseKey;
        end;
      finally
        vReg.Free;
      end;
    end;
  finally
    CloseHandle(tolken);
  end;
end;

В целом код не сложный если прочитать msdn, но вот только я по началу не заметил того что редактирование реестра HKEY_CURRENT_USER происходит у админа ПК под которым я залогинился, а не под логином моего друга)), но в ветке HKEY_USERS я нашел все учетки и друга и админа да и вообще всех пользователей пк которые можно изменять без проблем.