По просьбе трудящихся выкладываю вот такой простенький исходник программки с помощью, которой можно получить ТИЦ и 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
Есть идея по созданию интересной программы?
среда, 29 декабря 2010 г.
четверг, 2 декабря 2010 г.
Конкурс на WebDelphi с неограниченным призовым фондом.
Ярлыки:
Delphi события
Хочу поздравить всех со вторым днем зимы и сообщить о прекрасном известии.
1 декабря 2010 года (т.е. вчера) начался конкурс по программированию с неограниченным призовым фондом ( все зависит от количества принявших в нем участие людей( 50 рублей за каждого нового конкурсанта), но начальный призовой фонд составляет 1000 рублей ).
Принять участие в конкурсе могут все программисты круг не ограничивается только Delphi (нас ни так много, но мы в тельняшках).
Если вы не профессионал то не беда, программу будут оценивать только по ее функционалу далекие от программирования люди следовательно и у вас есть шанс занять почетное первое место в этом конкурсе.
Правила и требования для участия в конкурсе можете просмотреть на сайте автора конкурса!
Желаю удачи!!!
1 декабря 2010 года (т.е. вчера) начался конкурс по программированию с неограниченным призовым фондом ( все зависит от количества принявших в нем участие людей( 50 рублей за каждого нового конкурсанта), но начальный призовой фонд составляет 1000 рублей ).
Принять участие в конкурсе могут все программисты круг не ограничивается только Delphi (нас ни так много, но мы в тельняшках).
Если вы не профессионал то не беда, программу будут оценивать только по ее функционалу далекие от программирования люди следовательно и у вас есть шанс занять почетное первое место в этом конкурсе.
Правила и требования для участия в конкурсе можете просмотреть на сайте автора конкурса!
Желаю удачи!!!
пятница, 19 ноября 2010 г.
Время простоя ПК
function CheckIddleTime: DWord;
var
LastInput: TLastInputInfo;
begin
LastInput.cbSize := SizeOf(TLastInputInfo);
GetLastInputInfo(LastInput);
Result := GetTickCount - LastInput.dwTime;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:= 'Время простоя: ' + vartostr(CheckIddleTime/1000)+' секунд(ы)';
end;
var
LastInput: TLastInputInfo;
begin
LastInput.cbSize := SizeOf(TLastInputInfo);
GetLastInputInfo(LastInput);
Result := GetTickCount - LastInput.dwTime;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:= 'Время простоя: ' + vartostr(CheckIddleTime/1000)+' секунд(ы)';
end;
четверг, 18 ноября 2010 г.
среда, 17 ноября 2010 г.
Файлы, проецируемые в память
Ярлыки:
Иститут
Технология файлов, проецируемых в память, является изящным средством для разделения ресурсов файловой системы между процессами.
При проецировании файла на адресное пространство процесса процесс может обращаться к содержимому файла так, как если бы файл был загружен в оперативную память.
Если несколько процессов выполняют проецирование одного и того же файла, то содержимое файла будет доступно для всех процессов, то есть позволит избежать загрузки множества экземпляров файла в оперативную память.
Для проецируемых файлов применяется 64-битная адресация, что позволяет использовать данную технологию для обработки сверхбольших (до 18 экзабайт) файлов, преодолевая, тем самым, ограничение на размер файла в 2 гигабайта.
При проецировании файла на адресное пространство процесса процесс может обращаться к содержимому файла так, как если бы файл был загружен в оперативную память.
Если несколько процессов выполняют проецирование одного и того же файла, то содержимое файла будет доступно для всех процессов, то есть позволит избежать загрузки множества экземпляров файла в оперативную память.
Для проецируемых файлов применяется 64-битная адресация, что позволяет использовать данную технологию для обработки сверхбольших (до 18 экзабайт) файлов, преодолевая, тем самым, ограничение на размер файла в 2 гигабайта.
пятница, 12 ноября 2010 г.
Программа для информирования пользователя о смене языка ввода 2 (Написана на Delphi)
Ярлыки:
Полезное
Немного изменил интерфейс, добавил то, что просили
Если нужен дополнительный функционал пишите.
Скачать программу под Windows XP SP3 можно отсюда Download
Скачать программу под Windows XP SP3 и Windows 7 64 можно отсюда Download
Как и просили исходник Windows 7 64
Так как нет возможности создания 64-х разрядной DLL сделал по таймеру))
Если нужен дополнительный функционал пишите.
Скачать программу под Windows XP SP3 можно отсюда Download
Скачать программу под Windows XP SP3 и Windows 7 64 можно отсюда Download
Как и просили исходник Windows 7 64
Так как нет возможности создания 64-х разрядной DLL сделал по таймеру))
пятница, 5 ноября 2010 г.
Программа для информирования пользователя о смене языка ввода (Написана на Delphi)
Ярлыки:
Полезное
Программа информирует вас о смене языка ввода так, как это не всегда происходит при нажатии комбинации клавиш которые, как раз отвечают за это дело, но эта программа известит вас об этом звуковым сигналом или сменой указателя мыши и гудком все это дело настраивается без проблем в программе.
Программа работает в ОС Windows XP SP3
Скриншот программы
Программа бесплатная так, что вы ее используете на свой страх и риск!
Я не несу ответственности за вред который вы причините используя эту программу!
ВИРУСОВ НЕТ!
Скачать программу под Windows XP SP3 можно отсюда Download
Скачать программу под Windows 7 64 можно отсюда Download
В дополнение ко все хочу сказать, что я не пытался сделать PuntoSwithcher, слишком много автоматизации иногда мешает им ни когда не пользовался и не собираюсь, каждому своё!
Программа работает в ОС Windows XP SP3
Скриншот программы
Программа бесплатная так, что вы ее используете на свой страх и риск!
Я не несу ответственности за вред который вы причините используя эту программу!
ВИРУСОВ НЕТ!
Скачать программу под Windows XP SP3 можно отсюда Download
Скачать программу под Windows 7 64 можно отсюда Download
В дополнение ко все хочу сказать, что я не пытался сделать PuntoSwithcher, слишком много автоматизации иногда мешает им ни когда не пользовался и не собираюсь, каждому своё!
понедельник, 1 ноября 2010 г.
Google Chrome Frame for Delphi 2010
Ярлыки:
Компоненты
Компонент для использования функций Google Chrome в своих приложениях или же написания своего браузера на основе Google Chrome в Delphi.
Скриншот примера идущего в комплекте с компонентом.
ActiveX из npchrome_frame.dll не импортируется полностью и один хороший человек написал компонент на радость пользователям Delphi сайт
Компонент Google Chrome Frame для Delphi 2010 можно скачать отсюда Download
Скриншот примера идущего в комплекте с компонентом.
ActiveX из npchrome_frame.dll не импортируется полностью и один хороший человек написал компонент на радость пользователям Delphi сайт
Компонент Google Chrome Frame для Delphi 2010 можно скачать отсюда Download
суббота, 23 октября 2010 г.
Организация межзадачного обмена
Ярлыки:
Иститут
Задание. Организовать работу программы-сервера и нескольких программ клиентов следующим образом:
Сервер предоставляет клиентам кокой-либо из своих ресурсов (например, собственное окно)
Клиенты подключаются к серверу и начинают запись в окно, причем первый клиент пишет только «1», второй – только «2», и т.д. Клиентов может быть произвольное количество, но не менее пяти.
Если клиент подключается к серверу в монопольном режиме, он получает исключительные права на использование ресурса сервера. Все остальные клиенты, пытающиеся подключиться в данный момент, не должны получить доступ к ресурсу сервера и должны оказаться в очереди на обслуживание.
воскресенье, 17 октября 2010 г.
MEMORY_BASIC_INFORMATION структура
Ярлыки:
Windows
Содержит сведения о диапазоне страниц в виртуальном адресном пространстве процесса. Функции VirtualQuery и VirtualQueryEx использовать эту структуру.
Синтаксис Delphi
type
PMemoryBasicInformation = ^TMemoryBasicInformation;
_MEMORY_BASIC_INFORMATION = record
BaseAddress : Pointer;
AllocationBase : Pointer;
AllocationProtect : DWORD;
RegionSize : DWORD;
State : DWORD;
Protect : DWORD;
Type_9 : DWORD;
end;
{$EXTERNALSYM _MEMORY_BASIC_INFORMATION}
TMemoryBasicInformation = _MEMORY_BASIC_INFORMATION;
MEMORY_BASIC_INFORMATION = _MEMORY_BASIC_INFORMATION;
{$EXTERNALSYM MEMORY_BASIC_INFORMATION}
Члены
Требования
Синтаксис Delphi
type
PMemoryBasicInformation = ^TMemoryBasicInformation;
_MEMORY_BASIC_INFORMATION = record
BaseAddress : Pointer;
AllocationBase : Pointer;
AllocationProtect : DWORD;
RegionSize : DWORD;
State : DWORD;
Protect : DWORD;
Type_9 : DWORD;
end;
{$EXTERNALSYM _MEMORY_BASIC_INFORMATION}
TMemoryBasicInformation = _MEMORY_BASIC_INFORMATION;
MEMORY_BASIC_INFORMATION = _MEMORY_BASIC_INFORMATION;
{$EXTERNALSYM MEMORY_BASIC_INFORMATION}
Члены
- BaseAddress
- Указатель на базовый адрес региона страниц.
- AllocationBase
- Указатель на базовый адрес диапазона страниц ассигнован функцией VirtualAlloc. Страница, на которую указывает член BaseAddress, содержится в пределах этого диапазона распределения.
- AllocationProtect
- Выбор защиты памяти, когда область была первоначально ассигнована. Этот участник может быть одной из констант защиты памяти или 0, если у гостя нет доступа.
- RegionSize
- Размер в регионе, начиная с базового адреса, в которой все страницы имеют идентичные атрибуты, в байтах.
- State
- Состояние страницы в регионе. Этот член может быть одним из следующих значений.
Состояние Смысл
- MEM_COMMIT
- 0x1000
Указывает на фиксированные страницы, для которых физическое хранение было выделено, или в памяти или в страничном файле на диске.
- MEM_FREE
- 0x10000
Указывает свободных страниц, не доступных для вызывающего процесса и которые будут выделены. Для свободных страниц информация в AllocationBase, AllocationProtect, Protect, тип и элементы не определены.
- MEM_RESERVE
- 0x2000
Указывает на зарезервированные страницы, где диапазон виртуального адресного пространства процесса зарезервирован без любого физического выделяемого хранения. Для зарезервированных страниц информация в элементе защита не определена.
- Protect
- Защита доступа страницы в регионе. Этот член является одним из значений, перечисленных для элемента AllocationProtect.
- Type
- Тип страниц в регионе. Определены следующие типы.
Тип Смысл
- MEM_IMAGE
- 0x1000000
Указывает, что страницы памяти в пределах региона сопоставляются в представление изображения раздела.
- MEM_MAPPED
- 0x40000
Указывает, что страницы памяти в пределах региона сопоставляются в представление раздела.
- MEM_PRIVATE
- 0x20000
Указывает на страницах памяти в пределах частного региона (что не разделяется другими процессами).
Чтобы позволить отладчику отладить цель, которая используется на различной архитектуре (32-битовый против 64-битового), используйте одну из явных форм этой структуры.
Копия
typedef struct _MEMORY_BASIC_INFORMATION32 {
DWORD BaseAddress;
DWORD AllocationBase;
DWORD AllocationProtect;
DWORD RegionSize;
DWORD State;
DWORD Protect;
DWORD Type;
} MEMORY_BASIC_INFORMATION32, *PMEMORY_BASIC_INFORMATION32;
typedef struct DECLSPEC_ALIGN(16) _MEMORY_BASIC_INFORMATION64 {
ULONGLONG BaseAddress;
ULONGLONG AllocationBase;
DWORD AllocationProtect;
DWORD __alignment1;
ULONGLONG RegionSize;
DWORD State;
DWORD Protect;
DWORD Type;
DWORD __alignment2;
} MEMORY_BASIC_INFORMATION64, *PMEMORY_BASIC_INFORMATION64;
Требования
Минимальная поддерживаемая клиента | Windows 2000 Professional |
|---|---|
Минимальный поддерживаемый сервер | Windows 2000 Server |
Заголовок | Windows.pas |
VirtualQuery Delphi
Ярлыки:
Windows
Извлекает сведения о диапазоне страниц в виртуальном адресном пространстве вызывающего процесса.
Чтобы извлечь сведения о диапазоне страниц в адресное пространство другого процесса, используйте функцию VirtualQueryEx.
Синтаксис Delphi
function VirtualQuery(lpAddress: Pointer;
var lpBuffer: TMemoryBasicInformation; dwLength: DWORD): DWORD; stdcall;
Замечания
Если изменить общую страницу copy-on-write, становится частным процессу изменения страницы. Однако функции VirtualQuery продолжит представлять такие страницы как MEM_MAPPED (для представления данных) или MEM_IMAGE (для исполняемого образа просмотров), а не MEM_PRIVATE. Чтобы определить, произошла ли copy-on-write для конкретной страницы, либо доступ к странице или блокировки его с помощью функции VirtualLock убедитесь, что страница находится в памяти, а затем используйте функцию QueryWorkingSetEx, чтобы проверить Общие бит в расширенная информация о рабочем множестве для страницы. Если бит Shared ясно, страница является частным.
Чтобы извлечь сведения о диапазоне страниц в адресное пространство другого процесса, используйте функцию VirtualQueryEx.
Синтаксис Delphi
function VirtualQuery(lpAddress: Pointer;
var lpBuffer: TMemoryBasicInformation; dwLength: DWORD): DWORD; stdcall;
- lpAddress [in, необязательно]
- Указатель на базовый адрес региона страниц для запрашиваться. Это значение округляется до следующей границу страницы. Чтобы определить размер страницы на главном компьютере, используйте функцию GetSystemInfo.
Если lpAddress указывает адрес выше наивысший адрес памяти, доступной для процесса, функция завершается с ERROR_INVALID_PARAMETER.
- lpBuffer [out]
- Указатель на структуру MEMORY_BASIC_INFORMATION, в которых информация указанная страница возвращается диапазон.
- dwLength [in]
- Размер буфера указывает параметр lpBuffer, в байтах.
Возвращаемое значение является фактическим количество байтов, возвращенных в буфере сведений.
Если вызов функции был неуспешен, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите функцию GetLastError. Значения возможной ошибки включают ERROR_INVALID_PARAMETER.Замечания
VirtualQuery предоставляет информацию о регионе последовательных страниц, начиная с указанного адреса, которые разделяют следующие атрибуты:
- Состояние всех страниц равно же (MEM_COMMIT, MEM_RESERVE, MEM_FREE, MEM_PRIVATE, MEM_MAPPED или MEM_IMAGE).
- Если начальная страница не свободна, все страницы в регионе являются частью же первоначальное распределение страниц созданных один вызов VirtualAlloc, MapViewOfFile или один из следующих расширенных версий этих функций: VirtualAllocEx, VirtualAllocExNuma, MapViewOfFileEx, MapViewOfFileExNuma.
- Права доступа, предоставляемые всех страниц это же (PAGE_READONLY, PAGE_READWRITE, PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD или PAGE_NOCACHE).
Если изменить общую страницу copy-on-write, становится частным процессу изменения страницы. Однако функции VirtualQuery продолжит представлять такие страницы как MEM_MAPPED (для представления данных) или MEM_IMAGE (для исполняемого образа просмотров), а не MEM_PRIVATE. Чтобы определить, произошла ли copy-on-write для конкретной страницы, либо доступ к странице или блокировки его с помощью функции VirtualLock убедитесь, что страница находится в памяти, а затем используйте функцию QueryWorkingSetEx, чтобы проверить Общие бит в расширенная информация о рабочем множестве для страницы. Если бит Shared ясно, страница является частным.
Эта функция доклады на регионе страниц в памяти вызывающего процесса, и функцию VirtualQueryEx доклады о регионе страниц в памяти указанным процессом.
Требования
Требования
Минимальная поддерживаемая клиента | Windows 2000 Professional |
|---|---|
Минимальный поддерживаемый сервер | Windows 2000 Server |
Заголовок | Windows.pas |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |
SYSTEM_INFO Delphi
Ярлыки:
Windows
PSystemInfo = ^TSystemInfo;
_SYSTEM_INFO = record
case Integer of
0: ( dwOemId: DWORD);
1: (wProcessorArchitecture: Word;
wReserved: Word;
dwPageSize: DWORD;
lpMinimumApplicationAddress: Pointer;
lpMaximumApplicationAddress: Pointer;
dwActiveProcessorMask: DWORD;
dwNumberOfProcessors: DWORD;
dwProcessorType: DWORD;
dwAllocationGranularity: DWORD;
wProcessorLevel: Word;
wProcessorRevision: Word);
end;
{$EXTERNALSYM _SYSTEM_INFO}
TSystemInfo = _SYSTEM_INFO;
SYSTEM_INFO = _SYSTEM_INFO;
{$EXTERNALSYM SYSTEM_INFO}
Эта структура содержит сведения о текущей системе компьютера. Она включает в себя тип процессора, размер страницы, адреса памяти и идентификатор OEM.
_SYSTEM_INFO = record
case Integer of
0: ( dwOemId: DWORD);
1: (wProcessorArchitecture: Word;
wReserved: Word;
dwPageSize: DWORD;
lpMinimumApplicationAddress: Pointer;
lpMaximumApplicationAddress: Pointer;
dwActiveProcessorMask: DWORD;
dwNumberOfProcessors: DWORD;
dwProcessorType: DWORD;
dwAllocationGranularity: DWORD;
wProcessorLevel: Word;
wProcessorRevision: Word);
end;
{$EXTERNALSYM _SYSTEM_INFO}
TSystemInfo = _SYSTEM_INFO;
SYSTEM_INFO = _SYSTEM_INFO;
{$EXTERNALSYM SYSTEM_INFO}
Эта структура содержит сведения о текущей системе компьютера. Она включает в себя тип процессора, размер страницы, адреса памяти и идентификатор OEM.
Blogger совет
Ярлыки:
Blogger
Для того, чтобы повысить находимость вашего блога в инете поисковиками пишите название статьи в транслите, а потом уже на русском языке. Так название у вашей страницы будет осмысленным, а не просто датой написания сообщения!
Пример
Название было Blogger sovet
На выходе получил страницу http://nmdsoft.blogspot.com/2010/10/blogger-sovet.html
Потом просто отредактировал название статьи на Blogger совет
Пример
Название было Blogger sovet
На выходе получил страницу http://nmdsoft.blogspot.com/2010/10/blogger-sovet.html
Потом просто отредактировал название статьи на Blogger совет
GetSystemInfo (Delphi)
Ярлыки:
Windows
Эта функция возвращает сведения о текущей системе.
Синтаксис Delphi
procedure GetSystemInfo(var lpSystemInfo: TSystemInfo); stdcall;
Параметры
Указатель на структуру SYSTEM_INFO для заполнения этой функцией.
Возвращаемое значение
Нет
Требования
ОС: Windows CE 1.0 и более поздних версий.
Заголовок: Windows.pas
Связывание библиотеки: Coredll.lib.
Синтаксис Delphi
procedure GetSystemInfo(var lpSystemInfo: TSystemInfo); stdcall;
Параметры
Указатель на структуру SYSTEM_INFO для заполнения этой функцией.
Возвращаемое значение
Нет
Требования
ОС: Windows CE 1.0 и более поздних версий.
Заголовок: Windows.pas
Связывание библиотеки: Coredll.lib.
суббота, 16 октября 2010 г.
Чтение карты памяти
Ярлыки:
Иститут
Сессия скоро))
Если мы можем, получит список запущенных процессов, то представляется интересной возможность прочитать содержимое адресного пространства процесса с целью определить, какие регионы зарезервированы в адресном пространстве процесса, каков объем зарезервированных регионов и свободного адресного пространства, как установлен режим доступа к тем или иным регионам и т.д.. Одним словом, надо читать карту адресного пространства процесса.
При создании процесса можно управлять доступом к его адресному пространству, т.е. разрешать или не разрешать чтение адресного пространства процесса.
Естественно, что прочитать вы можете только участок адресного пространства, отведенный в собственность прикладному процессу (т.е. 2 ГБ пользовательского адресного пространства процесса)
При помощи функции GetSystemInfo() получаем границы данного региона, т.е. минимальный и максимальный адреса, доступные приложению. Теперь наша задача - прочитать содержимое адресного пространства, ограниченного данными адресами.
Читаем при помощи функции VirtualQuery()
Чтение карты адресного пространства производим, организуя цикл от минимального доступного адреса до максимального доступного.
Передаем в VirtualQuery() минимальный из доступных адресов при первой итерации цикла. Функция возвратит нам объем региона, зарезервированного по данному адресу, его объем, установленный режим защиты и т.д.
Адрес следующего региона получаем так:
<Текущий адрес региона>+<Объем текущего региона>
Далее продолжаем итерации пока не доберемся до максимального из доступных адресов.
Многопотоковая обработка.
Ярлыки:
Иститут
Задание 1 на текущую сессию))
Использование класса TThread, включенного в поставку interise Delphi или C++ Builder, допускается в ознакомительных целях.
Пример: выполнить имитатор гонок (в просторечии эта задача известна как «тараканьи бега» ) при помощи создания нескольких потоков. Каждый поток обслуживает свою «беговую дорожку». На исполнение все потоки запускаются одновременно, после чего потоки произвольным образом приостанавливаются и запускаются вновь функциями SuspendThread() и ResumeThread().
На исполнение каждому потоку выделяется квант времени (например, 500 мс или 1 с). За этот период поток производит выполнение задачи, например, увеличивает позицию гонщика на некоторую величину. После истечения кванта времени поток приостанавливается на производный период времени, определяемый при помощи генератора случайных чисел.
После завершения гонки производиться выдача результатов(очередность завершения).
Завершение потока после завершения исполнения можно произвести при помощи функций ExitThread() и TerminateThread().
Использование класса TThread, включенного в поставку interise Delphi или C++ Builder, допускается в ознакомительных целях.
пятница, 15 октября 2010 г.
XML без переносов
Ярлыки:
Инструменты,
Полезное
Для удобства разбора XML использую Notepad++ и дополнение XML Tools с помощью которой вот такой вот xml документ
с помощью двух нажатий мыши становиться прекрасным для дальнейшего его изучения и разбора без траты своего времени и сил.
с помощью двух нажатий мыши становиться прекрасным для дальнейшего его изучения и разбора без траты своего времени и сил.
вторник, 12 октября 2010 г.
Counter-Strike informer for Delphi
Получение информации о текущем состоянии сервера Counter-Strike в сети по средством выполнения Udp запроса.
Основная сложность состояла в разборе ответа сервера.
Проверял на работоспособность на серверах использующий 37 протокол, а на 47, 48 не проверял.
суббота, 2 октября 2010 г.
Gecko for Delphi
Ярлыки:
Компоненты
Компонент TGeckoBrowser 15.01.2010
Для использования всех возможностей движка Gecko в своих приложениях на Delphi
Компонент идет с исходниками и примерами.
Компонент TGeckoBrowser можно скачать тут. Download
Компонент TGeckoBrowser Delphi 2007 можно скачать тут. Download
Инструкция по установке
1- инсталим .dpk файл из папки GeckoSDK
2- инсталим .dpk файл из папки GeckoComponents
3- добавляем путь до папок
Для использования всех возможностей движка Gecko в своих приложениях на Delphi
Компонент идет с исходниками и примерами.
Компонент TGeckoBrowser можно скачать тут. Download
Компонент TGeckoBrowser Delphi 2007 можно скачать тут. Download
Инструкция по установке
1- инсталим .dpk файл из папки GeckoSDK
2- инсталим .dpk файл из папки GeckoComponents
3- добавляем путь до папок
четверг, 30 сентября 2010 г.
Получение очередного значения генератора Firebird
Ярлыки:
Firebird
select
gen_id(generator_name, 1 ) as field_id
from rdb$database
одна запись в поле field_id со значением очередного значения генератора generator_name
gen_id(generator_name, 1 ) as field_id
from rdb$database
одна запись в поле field_id со значением очередного значения генератора generator_name
воскресенье, 26 сентября 2010 г.
Диалоговое окно WebBrowser ошибка сценария
Ярлыки:
TWebBrowser
Избавляемся от окна путем установки значения свойства Silent:=True
WebBrowser1.Silent:=True;
Свойство Silent запрет демонстрации ошибок сценария на сайте
WebBrowser1.Silent:=True;
Свойство Silent запрет демонстрации ошибок сценария на сайте
Этот документ был изменен. Сохранить изменения?
Ярлыки:
TWebBrowser
Это диалоговое окно возникает только когда WebBrowser находиться в режиме редактора и происходит загрузка другого документа, а в документ который был первоначально загружен были произведены изменения.
Чтобы избавиться от этого диалогового окна следует отключить режим редактора в WebBrowser и загрузить документ после чего снова включить режим редактора.
Включения редактора в WebBrowser я повесил на событие возникающие по окончанию загрузки документа в WebBrowser NavigateComplite.
.....
WebBrowser1.OnNavigateComplete2: = NavigateComplite;
WebBrowser1.Navigate('Документ');
.....
procedure NavigateComplite (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
end;
Чтобы избавиться от этого диалогового окна следует отключить режим редактора в WebBrowser и загрузить документ после чего снова включить режим редактора.
Включения редактора в WebBrowser я повесил на событие возникающие по окончанию загрузки документа в WebBrowser NavigateComplite.
.....
WebBrowser1.OnNavigateComplete2: = NavigateComplite;
(WebBrowser1.Document as IHTMLDocument2).designMode := 'off'; WebBrowser1.Navigate('Документ');
.....
procedure NavigateComplite (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
(WebBrowser1.Document as IHTMLDocument2).designMode := 'On';
end;
суббота, 11 сентября 2010 г.
FIBPlus + Ehlib локальная сортировка
Для того, чтобы в гриде Ehlib'а работала сортировка и фильтрация необходимо добавить в uses модуль находящийся в папке EhLib 5.2.84\DataService\Others естественно если вы работаете с
Ado необходимо выбрать EhlibADO в нашем случае необходимо выбрать EhlibFib
после чего в свойствах грида выставить значения так
.SortLocal := True;
.STFilter.InstantApply := True;
.STFilter.Local := True;
.STFilter.Visible := True;
после чего фильтрация должна работать в гриде нормально без написания дополнительного кода
И необходимо в Uses прописать EhlibFIB (для фибов)
Ado необходимо выбрать EhlibADO в нашем случае необходимо выбрать EhlibFib
после чего в свойствах грида выставить значения так
.SortLocal := True;
.STFilter.InstantApply := True;
.STFilter.Local := True;
.STFilter.Visible := True;
после чего фильтрация должна работать в гриде нормально без написания дополнительного кода
И необходимо в Uses прописать EhlibFIB (для фибов)
Загрузка изображения из интернета в поток (Delphi)
uses wininet;
function LoadImage(url:string): TMemoryStream;
var
hInternet, hConnect: pointer;
dwBytesRead, i, L: cardinal;
sTemp: AnsiString;
begin
Result:=TMemoryStream.Create;
hInternet := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hInternet) then
begin
hConnect := InternetOpenUrl(hInternet, PChar(url), nil, 0, 0, 0);
if Assigned(hConnect) then
try
i := 1;
repeat
SetLength(sTemp, L + i);
if not InternetReadFile(hConnect, @sTemp[i], sizeof(L),dwBytesRead) then
break;
inc(i, dwBytesRead);
until dwBytesRead = 0;
finally
InternetCloseHandle(hConnect);
end;
end;
finally
InternetCloseHandle(hInternet);
end;
Result.Write(sTemp[1], Length(sTemp));
Result.Position := 0;
end;
Данную функцию использовал для загрузки изображений с различными форматами:
bmp, gif, png, jpeg, tiff, ico и др. Проблем не возникало. Главное, что необходимо сделать это сохранять картинки с теми же расширениями которые у них были, чтобы потом не возникало путаницы. Я сохранял с именами файлов которые брал из прямых ссылок на картинки.
Для получения имени файла из Url использую функцию
function ExtractUrlFileName(const AUrl: string): string;
var
i: Integer;
begin
i := LastDelimiter('/', AUrl);
Result := Copy(AUrl, i + 1, Length(AUrl) - (i));
end;
function LoadImage(url:string): TMemoryStream;
var
hInternet, hConnect: pointer;
dwBytesRead, i, L: cardinal;
sTemp: AnsiString;
begin
Result:=TMemoryStream.Create;
hInternet := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hInternet) then
begin
hConnect := InternetOpenUrl(hInternet, PChar(url), nil, 0, 0, 0);
if Assigned(hConnect) then
try
i := 1;
repeat
SetLength(sTemp, L + i);
if not InternetReadFile(hConnect, @sTemp[i], sizeof(L),dwBytesRead) then
break;
inc(i, dwBytesRead);
until dwBytesRead = 0;
finally
InternetCloseHandle(hConnect);
end;
end;
finally
InternetCloseHandle(hInternet);
end;
Result.Write(sTemp[1], Length(sTemp));
Result.Position := 0;
end;
Данную функцию использовал для загрузки изображений с различными форматами:
bmp, gif, png, jpeg, tiff, ico и др. Проблем не возникало. Главное, что необходимо сделать это сохранять картинки с теми же расширениями которые у них были, чтобы потом не возникало путаницы. Я сохранял с именами файлов которые брал из прямых ссылок на картинки.
Для получения имени файла из Url использую функцию
function ExtractUrlFileName(const AUrl: string): string;
var
i: Integer;
begin
i := LastDelimiter('/', AUrl);
Result := Copy(AUrl, i + 1, Length(AUrl) - (i));
end;
воскресенье, 29 августа 2010 г.
Компонент Clipper версия 2.35 (Delphi)
Ярлыки:
Компоненты
Компонент Clipper выполняет логические операции отсечения (пересечение, объединение, разность и XOR) на 2D полигонах. Он с легкостью справляется со сложными (само пересекающимися ) полигонами, полигонами с отверстиями и полигонами с перекрытием совместного линейного края. Данный компонент быстрее остальных выполняет эти сложные операции.
Компонент TDirwatch (Delphi)
Ярлыки:
Компоненты
Не визуальных компонент, который уведомляет, когда файлы (или подкаталоги) в выбранном каталоге изменились.Этот компонент инкапсулирует функцию FindFirstChangeNotification WinAPI в просмотре потока.Версия Delphi: 3-7
Freeware с полным исходным кодом, а также Demo.
Компонент TDirwatch можно скачать отсюда download
Компонент TDiff версии 4.1 (Delphi)
Ярлыки:
Компоненты
Компонент TZipFix - Версия 1.1 (Delphi)
Ярлыки:
Компоненты
Не визуальный компонент для восстановления поврежденных Zip файлов. Даже если некоторые участки архива повреждены то другие могут быть восстановлены и пере собраны в новый zip архив. Данная библиотека не поможет при взломе архивов, так как он остается неизменным.Версия Delphi: 3-7
Freeware с полным исходным кодом, файл справки и примеры.
Последнее обновление: 6 апреля 2003
Компонент TZipFix можно скачать отсюда download
суббота, 28 августа 2010 г.
Компонент GLibWMI 1.8beta All (Delphi)
Ярлыки:
Компоненты
Данная библиотека позволяется получить полную информацию о
- Bios
- Аудио карта
- Жесткий диск
- Принтер
- Дисплей
- Клавиатура
- Процессор
- CD-Rom
- Батарея (если есть)
- ОС
- "Мышь"
- Оперативная память
- Процессы ПК
- Службы ОС
- Рабочий стол
- Автозапуск
- Сетевое оборудование
- Аккаунты в ОС
- Расшаренные папки
- Задания на принтере
- USB
- Разделы жесткого диска
- Переменные среды ОС
четверг, 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 я нашел все учетки и друга и админа да и вообще всех пользователей пк которые можно изменять без проблем.
Всегда ему говорил же отключай ты службу удаленного реестра, ну вот не слушался))
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 я нашел все учетки и друга и админа да и вообще всех пользователей пк которые можно изменять без проблем.
Утилита для проверки файлов которые еще живы на Turbobit (TurbobitLinkChecker)
Ярлыки:
Полезное
Данная утилита написана по просьбе NoSch, который является администратором сайта и тесно связан с этим файлообменником.
Программа написана с использованием библиотеки Indy входящей в комплект поставки Delphi 2010, просто нужно было быстро это сделать, а ни чего другого под рукой не было.
Думаю кому нибудь эта утилита пригодиться и мой труд не пропадет даром.
Внешний вид программы весьма аскетичный, чтобы ни чего не отвлекало.
Имеется 3 списка в первом указываем все ссылки которые необходимо проверить, во втором и третьем получаем список рабочих ссылок и список нерабочих ссылок соответственно.
Программа написана с использованием библиотеки Indy входящей в комплект поставки Delphi 2010, просто нужно было быстро это сделать, а ни чего другого под рукой не было.
Думаю кому нибудь эта утилита пригодиться и мой труд не пропадет даром.
Внешний вид программы весьма аскетичный, чтобы ни чего не отвлекало.
Имеется 3 списка в первом указываем все ссылки которые необходимо проверить, во втором и третьем получаем список рабочих ссылок и список нерабочих ссылок соответственно.
суббота, 21 августа 2010 г.
Создание иконки для компонента Delphi 2010 (Creating an icon for the component Delphi 2010)
Ярлыки:
Компоненты,
Delphi 2010
Создадим пакет для будущего компонента (если у вас нет компонента (так для эксперимента))
Зайдем File->New->Package
если у вас нет этого пункта то File->New->Other->Package
Получим пустой пакет. После чего его необходимо сохранить в какую нибудь папку
Зайдем File->New->Package
если у вас нет этого пункта то File->New->Other->Package
Получим пустой пакет. После чего его необходимо сохранить в какую нибудь папку
пятница, 20 августа 2010 г.
Проблема с иконками в палитре компонентов Delphi 2010
Ярлыки:
Delphi 2010
Проблема заключается в том, что при добавлении компонента у него иконка то есть то ее нет.
На мой взгляд проблема вызвана тем, что в файле ресурсов имеется иконка компонента только одного размера и оно 24 битное, а среда требует 32 бита, а сама палитра поддерживает иконки размерами 16х16, 24х24 и 32х32
Для того, чтобы задать размер иконки в файле ресурсов необходимо добавить еще иконки только как это сделать ведь имя битмапа должно быть именем класса TMyComponent
Необходимо просто в конце указать размер
TMyComponent 16х16
TMyComponent24 24х24
TMyComponent32 32х32
После чего все должно корректно отображаться.
Так же необходимо,чтобы изображение было 32bit
Было выявлено в процессе создания иконки для своего компонента. Возможно конечно это единичный случай, но следует о нем просто знать
На мой взгляд проблема вызвана тем, что в файле ресурсов имеется иконка компонента только одного размера и оно 24 битное, а среда требует 32 бита, а сама палитра поддерживает иконки размерами 16х16, 24х24 и 32х32
Для того, чтобы задать размер иконки в файле ресурсов необходимо добавить еще иконки только как это сделать ведь имя битмапа должно быть именем класса TMyComponent
Необходимо просто в конце указать размер
TMyComponent 16х16
TMyComponent24 24х24
TMyComponent32 32х32
После чего все должно корректно отображаться.
Так же необходимо,чтобы изображение было 32bit
Было выявлено в процессе создания иконки для своего компонента. Возможно конечно это единичный случай, но следует о нем просто знать
Отличный редактор ресурсов (Resource Editor)
Ярлыки:
Инструменты
Нашел на просторах интернета интересную бесплатную программу для редактирования ресурсов, аналог Image Editor идущей с Delphi7 по какой то причине она отсутствует во всех последующих версиях Delphi. Автор этой программы решил это исправить, но он не может связать свою программу со средой по причине отсутствия интерфейсов необходимых для этого
Внешний вид программы
Внешний вид программы
понедельник, 2 августа 2010 г.
Blogger robot.txt
Ярлыки:
Blogger
Решение проблемы Blogger robot.txt
URL заблокирован файлом robots.txt Modifying Robots.txt on Blogger possible? Create a robots.txt file
Для обхода robot.txt вашего блога в шаблоне вашего блога необходимо добавить следующую строку
<meta content='INDEX, FOLLOW' name='robots'/>
После чего все ваши страницы будут разрешены к индексации.
Запрещение индексации ссылок
<noindex><a href="http://сайт">ссылка</a></noindex>
и
<a rel="nofollow" href="http://сайт">ссылка</a>
URL заблокирован файлом robots.txt Modifying Robots.txt on Blogger possible? Create a robots.txt file
Для обхода robot.txt вашего блога в шаблоне вашего блога необходимо добавить следующую строку
<meta content='INDEX, FOLLOW' name='robots'/>
После чего все ваши страницы будут разрешены к индексации.
Запрещение индексации ссылок
<noindex><a href="http://сайт">ссылка</a></noindex>
и
<a rel="nofollow" href="http://сайт">ссылка</a>
TRegExpr (Delphi)
Ярлыки:
Компоненты
Универсальный инструмент для проверки пользовательского ввода на соответствие шаблонам, для замены подстрок и самого изощренного поиска.
Вы можете проверить синтаксическую корректность e-mail адреса, извлечь номера телефонов из не формализованного текста, найти необходимую информацию в web-странице - возможности ограничены только Вашим воображением. Правила (шаблоны) можно изменять не пере компилируя Вашу программу!
Вы можете проверить синтаксическую корректность e-mail адреса, извлечь номера телефонов из не формализованного текста, найти необходимую информацию в web-странице - возможности ограничены только Вашим воображением. Правила (шаблоны) можно изменять не пере компилируя Вашу программу!
Proxy Parser (Delphi)
Ярлыки:
Компоненты
Компонент позволяющий получать список прокси серверов с сайтов их раздающих (единственное не все их дают просто так некоторые используют методы защиты от таких вот сборщиков ). Мой самый первый компонент, впервые в нем использовал коллекции и для его работы необходима библиотека indy(на тот момент почему то они меня устраивали глюков по крайней мере не было).
Компонент идет со всеми исходниками, работал на Delphi 7 на Delphi 2010 должен пойти тоже после пере компиляции пакета. Так же идет demo проект в котором показан пример использования компонента на практике.
При публикации данного компонента у себя на сайте или блоге прошу указать ссылку на мой блог думаю это не большая плата за авторство.
Компонент Proxy Parser можно скачать отсюда Download
Компонент идет со всеми исходниками, работал на Delphi 7 на Delphi 2010 должен пойти тоже после пере компиляции пакета. Так же идет demo проект в котором показан пример использования компонента на практике.
При публикации данного компонента у себя на сайте или блоге прошу указать ссылку на мой блог думаю это не большая плата за авторство.
Компонент Proxy Parser можно скачать отсюда Download
Color Controls u2300 (Delphi)
Ярлыки:
Компоненты
Описание компонента Color Controls u2300
Красивый компонент Delphi для организации очень разнообразных таблиц в которых можно разными цветами выделять: поля, текст, цвет выделения. В комплекте идут исходники для delphi 5, delphi 6 и delphi 7 Demo пример в котором вы сможете увидеть все, что можно реализовать с помощью данного компонента (маленькой палитры).
Красивый компонент Delphi для организации очень разнообразных таблиц в которых можно разными цветами выделять: поля, текст, цвет выделения. В комплекте идут исходники для delphi 5, delphi 6 и delphi 7 Demo пример в котором вы сможете увидеть все, что можно реализовать с помощью данного компонента (маленькой палитры).
воскресенье, 1 августа 2010 г.
Property XXXX does not exist (Delphi)
Ярлыки:
Error
Возникает при обращении к свойству которого нет. Оно даже может и есть только имя его изменилось, на это тоже следует обращать внимание.
Причиной может служит использование другой версии компонента, в котором данного свойства нет. Установка нового компонента после некорректного удаления старого.
Причиной может служит использование другой версии компонента, в котором данного свойства нет. Установка нового компонента после некорректного удаления старого.
пятница, 30 июля 2010 г.
Описание DemoGoogleLogin
Ярлыки:
GoogleLogin
Для того, чтобы понять принцип работы компонента и получить желаемый результат мы как и все уважающие других программистов и их время сделали Demo проект в котором все, что делает компонент можно не только увидеть, но и посмотреть, как все это дело реализовано.
Внешний вид Demo проекта
Как видим вроде ни чего экстраординарного все просто и со вкусом
На форме имеем 3 кнопки, по средством которых и происходит либо авторизация пользователя, очистка памяти занимаемой компонентом (уничтожение его (после этого доступ к нему не возможен и вызовет исключительную ситуацию)) и авторизация с капчей.
Внешний вид Demo проекта
Как видим вроде ни чего экстраординарного все просто и со вкусом
На форме имеем 3 кнопки, по средством которых и происходит либо авторизация пользователя, очистка памяти занимаемой компонентом (уничтожение его (после этого доступ к нему не возможен и вызовет исключительную ситуацию)) и авторизация с капчей.
GoogleLogin Delphi часть 2
Ярлыки:
GoogleLogin
И так в предыдущей статье посвященной GoogleLogin я описал практически все, что было необходимо, но не описал методов нашего компонента. На сегодняшний день компонент претерпел некоторые изменения и я не стал удалять старую статью, а решил оставить ее для того, чтобы четко было видно отличия компонента от версии к версии.
Свойства компонента GoogleLogin
Свойства компонента остались практически без изменений, появилось лишь дополнительное поле Captha
Свойства компонента GoogleLogin
Свойства компонента остались практически без изменений, появилось лишь дополнительное поле Captha
вторник, 27 июля 2010 г.
Функция по загрузке jpg в Timage (Delphi)
Не скажу, что прям моя разработка, но к ней я свою корявую руку приложил))
//непосредственно сама функция по загрузке картинки формата jpg из сети интернет
//для работы функции необходимо добавить в uses ... wininet, Jpeg;
//непосредственно сама функция по загрузке картинки формата jpg из сети интернет
//для работы функции необходимо добавить в uses ... wininet, Jpeg;
function GetImage(url:string): TPicture;
var
hInternet, hConnect: pointer;
dwBytesRead, i, L: cardinal;
sTemp,aUrl: AnsiString; // текст страницы
memStream: TMemoryStream;
jpegimg: TJPEGImage;
begin
hInternet := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hInternet) then
begin
hConnect := InternetOpenUrl(hInternet, PChar(url), nil, 0, 0, 0);
if Assigned(hConnect) then
try
i := 1;
repeat
SetLength(sTemp, L + i);
if not InternetReadFile(hConnect, @sTemp[i], sizeof(L),dwBytesRead) then
break; // Получаем данные с сервера
inc(i, dwBytesRead);
until dwBytesRead = 0;
finally
InternetCloseHandle(hConnect);
end;
end;
finally
InternetCloseHandle(hInternet);
end;
memStream := TMemoryStream.Create;
jpegimg := TJPEGImage.Create;
try
memStream.Write(sTemp[1], Length(sTemp));
memStream.Position := 0;
//загрузка изображения из потока
jpegimg.LoadFromStream(memStream);
Result:=TPicture.Create;
Result.Assign(jpegimg);
finally
//очистка
memStream.Free;
jpegimg.Free;
end;
end;среда, 21 июля 2010 г.
GoogleLogin Delphi
Ярлыки:
GoogleLogin
Доброго времени суток)))
Сегодня мы обсудим компонент googleLogin написанный Владиславом Баженовым aka Vlad (его сайт), ну и я его немного доработал (хотя для кого-то может, сделал его хуже)
Короче как бы то ни было, но я решил рассказать о нем подробнее, чтобы любой программист смог его применить по назначению и получить максимум из того, что в нем реализовано
Установка компонента в Delphi 2010
Для установки компонента необходимо зайти в папку googleapi\packages\googleLogin_pack
в ней найти файл GoogleLogin.dpk открыть его в среде Delphi 2010 (он был написан в ней)
в настройках среды прописать переменные окружения, в общем указать путь (где то на диске)\googleapi\packages\googleLogin_pack\ после чего в менеджере проекта нажать на надписи GoogleLogin.bpl правой клавишей мыши и выбрать пункт меню Install после чего если вы все сделали правильно должно появиться окно с информацией о том, что компонент успешно установлен в систему
Сегодня мы обсудим компонент googleLogin написанный Владиславом Баженовым aka Vlad (его сайт), ну и я его немного доработал (хотя для кого-то может, сделал его хуже)
Короче как бы то ни было, но я решил рассказать о нем подробнее, чтобы любой программист смог его применить по назначению и получить максимум из того, что в нем реализовано
Установка компонента в Delphi 2010
Для установки компонента необходимо зайти в папку googleapi\packages\googleLogin_pack
в ней найти файл GoogleLogin.dpk открыть его в среде Delphi 2010 (он был написан в ней)
в настройках среды прописать переменные окружения, в общем указать путь (где то на диске)\googleapi\packages\googleLogin_pack\ после чего в менеджере проекта нажать на надписи GoogleLogin.bpl правой клавишей мыши и выбрать пункт меню Install после чего если вы все сделали правильно должно появиться окно с информацией о том, что компонент успешно установлен в систему
Установка компонентов в среду Delphi 7
Ярлыки:
IDE
Для того чтобы установить компонент в среду Delphi, который идет с файлом [nameComponent].dpk необходимо выполнить следующие действия.
Выполнить двойной клик на файле [nameComponent].dpk после чего откроется среда разработки с окном Package - [nameComponent].dpk
Пример окна
В нем мы видим кнопки Compile, Add, Remove, Install, Options
Кнопка Compile компилирует как это понятно из названия компонент (иногда это требуется перед установкой специфических компонентов)
Кнопка Add добавляет файлы к пакету компонента, а кнопка Remove в свою очеред удаляет файлы из пакета в основном они нужны только для разработчиков компонентов.
Кнопка Install необходима для установки компонента в среду разработки.
Кнопка Options вызывает окно настройки пакета компонента
Выполнить двойной клик на файле [nameComponent].dpk после чего откроется среда разработки с окном Package - [nameComponent].dpk
Пример окна
В нем мы видим кнопки Compile, Add, Remove, Install, Options
Кнопка Compile компилирует как это понятно из названия компонент (иногда это требуется перед установкой специфических компонентов)
Кнопка Add добавляет файлы к пакету компонента, а кнопка Remove в свою очеред удаляет файлы из пакета в основном они нужны только для разработчиков компонентов.
Кнопка Install необходима для установки компонента в среду разработки.
Кнопка Options вызывает окно настройки пакета компонента
вторник, 20 июля 2010 г.
Сollapsepanel (Delphi)
Ярлыки:
Компоненты
NewSpeedButton (Delphi)
Ярлыки:
Компоненты
TNewSpeedButton (LSSpeedButton) - Кнопка, подобная той, что используется в программе QIP Infium. Классные кнопочки для delphi. Неприхотливые в установке меня очень порадовали
Можно использовать для создания оригинального интерфейса с минимальным количеством кнопок на главной форме сочетающих в себе выпадающие списки, при грамотном использовании которых интерфейс станет интуитивно понятен и прост в обращении.
Скачать NewSpeedButton можно отсюда download
Можно использовать для создания оригинального интерфейса с минимальным количеством кнопок на главной форме сочетающих в себе выпадающие списки, при грамотном использовании которых интерфейс станет интуитивно понятен и прост в обращении.
Скачать NewSpeedButton можно отсюда download
ImageButton (Delphi)
Ярлыки:
Компоненты
Pngcp (Delphi)
Ярлыки:
Компоненты
Freebutton (Delphi)
Ярлыки:
Компоненты
Userslistbox_28 (Delphi)
Ярлыки:
Компоненты
SYSinfo (Delphi)
Ярлыки:
Компоненты
CX_cpu (delphi)
Ярлыки:
Компоненты
HotKeyManager (Delphi)
Ярлыки:
Компоненты
С помощью этого компонента можно реализовать в своих программах глобальные горячие клавиши без написания большого количества кода. Так же комбинация горячих клавиш не обязательно должна состоять из двух , она может быть и их трех одновременно нажатых клавиш.
В комплекте пример использования и сам компонент
Coolhints2k Delphi
Ярлыки:
Компоненты
Сbasyncdirscan (Delphi)
Ярлыки:
Компоненты
Компонент Cbasyncdirscan реализует много поточный поиск по директориям на вашем пк.
PNG Delphi
Ярлыки:
Компоненты
Delphi7 не работает с PNG, но с этой библиотекой будет. Этот модуль облегчил жизнь многим программистам у которых появилась необходимость использовать PNG изображения в своих проектах, который позволяет в обычный Image грузить PNG изображения. В общем очень удобная вещь с pngButton который идет в качестве примера использования их модуля в VCL
Скачать PNGDelphi7 можно отсюда download
Скачать PNGDelphi7 можно отсюда download
Delphi Gif
Ярлыки:
Компоненты
Компонент не визуальный, позволяющий отображать на форме GIF-изображения без всяких таймеров.
Для того чтобы ваше приложение научилось работать с GIF-изображениями необходимо просто прописать gifimage в uses и в процессе работы приложения в обычный Timage загрузить GIF-изображение.
Компонент Gifimage можно скачать осюда
Видео урок по этому компоненту здесь.
Drawobjects (delphi)
Ярлыки:
Компоненты
Drawobjects графическая библиотека для рисовая планов, схем. Прекрасная библиотека для реализации графических редакторов типа Visio или редакторов блок схем и самое главное компонент идет с исходными текстами модулей. В комплект поставки библиотеки так же включены демо примеры по которым при желании можно разобраться и написать, что то свое.
Компонент Drawobjects можно скачать отсюда download
Компонент Drawobjects можно скачать отсюда download
Atimagebox (Delphi)
Ярлыки:
Компоненты
Компонент Atimagebox для Delphi/C++Builder, показывающий изображение в прокручиваемой области. Компонент имеет такие полезные свойства как ImageFitToWindow, ImageCenter, ImageScale и т.д., поэтому с помощью него очень удобно отображать изображения.
Практически часть просмоторщика картинок реализована за вас. (при проверке работал компонент шустро. по край не мере в демке )
Компонент Atimagebox можно скачать отсюда download
Практически часть просмоторщика картинок реализована за вас. (при проверке работал компонент шустро. по край не мере в демке )
Компонент Atimagebox можно скачать отсюда download
Shapedform
Ярлыки:
Компоненты
Компонент для среды Delphi который по заданной картинке маске формирует регион формы.
С помощью этого компонента можно создать Форму любой формы)))
Пример использования компонента.
Буквы на рабочем столе это форма приложения которую можно так же закрыть, переместить и все, что с обычной формой, просто эта форма не квадратная.
В общем область использования этого компонента ограничивается лишь вашим воображением
Скачать компонент Shapedform можно отсюда download
С помощью этого компонента можно создать Форму любой формы)))
Пример использования компонента.
Буквы на рабочем столе это форма приложения которую можно так же закрыть, переместить и все, что с обычной формой, просто эта форма не квадратная.
В общем область использования этого компонента ограничивается лишь вашим воображением
Скачать компонент Shapedform можно отсюда download
TKMAlert (Delphi)
Ярлыки:
Компоненты
Компонент реализующий всплывающее окошко, как у программы Qip
Можно использовать для оповещения пользователя о наступлении какого либо события, которое не будет ему мешать заниматься делами и для того, чтобы закрыть окошко ему просто будет достаточно щелкнуть левой кнопкой мыши в его области и оно скроется с глаз долой и будет ждать своей участи.
Компонент тестировался на Delphi 7 все прекрасно работало.
Скачать можно отсюда DOWNLOAD
Можно использовать для оповещения пользователя о наступлении какого либо события, которое не будет ему мешать заниматься делами и для того, чтобы закрыть окошко ему просто будет достаточно щелкнуть левой кнопкой мыши в его области и оно скроется с глаз долой и будет ждать своей участи.
Компонент тестировался на Delphi 7 все прекрасно работало.
Скачать можно отсюда DOWNLOAD
понедельник, 19 июля 2010 г.
Synchronize
Ярлыки:
Thread
Используется для синхронизации потоков. Важно помнить, что параметром Synchronize (параметр)
может быть метод без параметров.
Запись типа Synchronize(myProcedure(fdsf)); будет расценена как ошибка, а Synchronize(myProcedure) будет работать, как надо.
может быть метод без параметров.
Запись типа Synchronize(myProcedure(fdsf)); будет расценена как ошибка, а Synchronize(myProcedure) будет работать, как надо.
понедельник, 12 июля 2010 г.
Удивительное рядом
Ярлыки:
Application
В процессе разработки компонента с использованием потоков обратил внимание на вставку кода которую использовал программер, который писал подобный компонент для работы с сетью и периодически делал вставку вот этого кода
while PeekMessage(msg,0,0,0,PM_REMOVE) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
решил разобраться, что же делает этот код, оказалось, что ни чего сверх естественного в нем нет
Проще говоря это даже всем известный код, который мы ни раз использовали в местах где могут происходит зависания формы. Ладно не буду томить это код Application.ProcessMessages;
while PeekMessage(msg,0,0,0,PM_REMOVE) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
решил разобраться, что же делает этот код, оказалось, что ни чего сверх естественного в нем нет
Проще говоря это даже всем известный код, который мы ни раз использовали в местах где могут происходит зависания формы. Ладно не буду томить это код Application.ProcessMessages;
воскресенье, 27 июня 2010 г.
GetLastError
Ярлыки:
Windows
function GetLastError: DWORD; stdcall;
Функция возвращает значение последней ошибки в потоке.
Пример
begin
if DeleteFile('CanDeletMe.txt') then
ShowMessage('Файл удален')
else
ShowMessage('Файл не удален, код ошибки = '+IntToStr(GetLastError));
end;
Функция возвращает значение последней ошибки в потоке.
Пример
begin
if DeleteFile('CanDeletMe.txt') then
ShowMessage('Файл удален')
else
ShowMessage('Файл не удален, код ошибки = '+IntToStr(GetLastError));
end;
InternetCloseHandle
Ярлыки:
Wininet
Закрытие дескриптора любой функции Wininet
Синтаксис Delphi
function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;
hInet Дескриптор который необходимо закрыть.
Возвращает True если дескриптор закрыт успешно, в противном случае False для получения дополнительной информации вызовите функцию GetLastError
Синтаксис Delphi
function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;
hInet Дескриптор который необходимо закрыть.
Возвращает True если дескриптор закрыт успешно, в противном случае False для получения дополнительной информации вызовите функцию GetLastError
InternetReadFile
Ярлыки:
Wininet
Чтение результатов выполнения функций InternetOpenUrl, FtpOpenFile или HttpOpenRequest
Синтаксис Delphi
function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;
dwNumberOfBytesToRead: DWORD;
var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;
hFile Дескриптор сессии, полученный вызовом функции.
lpBuffer Адрес буфера в который будут записаны данные
dwNumberOfBytesToRead Размер буфера в который будут записаны данные.
lpdwNumberOfBytesRead Число прочитанных байт.
Синтаксис Delphi
function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;
dwNumberOfBytesToRead: DWORD;
var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;
hFile Дескриптор сессии, полученный вызовом функции.
lpBuffer Адрес буфера в который будут записаны данные
dwNumberOfBytesToRead Размер буфера в который будут записаны данные.
lpdwNumberOfBytesRead Число прочитанных байт.
HttpSendRequest
Ярлыки:
Wininet
Посылает указанный запрос на сервер HTTP
Синтаксис Delphi
function HttpSendRequest(hRequest: HINTERNET; lpszHeaders: PChar;
dwHeadersLength: DWORD; lpOptional: Pointer;
dwOptionalLength: DWORD): BOOL; stdcall;
hRequest Дескриптор, полученный вызовом предыдущей функции.
lpszHeaders, dwHeadersLength Позволяет добавлять дополнительные заголовки к запросу. Подробнее об HTTP заголовках можно узнать на www.w3.org.
lpOptional,dwOptionalLength Указатель на данные, которые будут посланы на сервер вместе с запросом. Используется в методах "POST" и "PUT".
Простенький пример отправки POST запроса в wininet
Синтаксис Delphi
function HttpSendRequest(hRequest: HINTERNET; lpszHeaders: PChar;
dwHeadersLength: DWORD; lpOptional: Pointer;
dwOptionalLength: DWORD): BOOL; stdcall;
hRequest Дескриптор, полученный вызовом предыдущей функции.
lpszHeaders, dwHeadersLength Позволяет добавлять дополнительные заголовки к запросу. Подробнее об HTTP заголовках можно узнать на www.w3.org.
lpOptional,dwOptionalLength Указатель на данные, которые будут посланы на сервер вместе с запросом. Используется в методах "POST" и "PUT".
Простенький пример отправки POST запроса в wininet
HttpOpenRequest
Ярлыки:
Wininet
HTTP запрос выполняется в несколько этапов: открытие запроса, определение HTTP заголовка, собственно отправка запроса, чтение и обработка данных. Эта функция, как следует из её названия, открывает HTTP запрос.
Синтаксис Delphi
function HttpOpenRequest(hConnect: HINTERNET; lpszVerb: PChar;
lpszObjectName: PChar; lpszVersion: PChar; lpszReferrer: PChar;
lplpszAcceptTypes: PLPSTR; dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
hConnect Дескриптор сессии.
lpszVerb Задаёт имя команды запроса. Мы будем использовать методы "GET" и "POST".
lpszObjectName Имя целевого объекта. Это может быть просто HTML файл, скрипт или выполняемый модуль на сервере.
lpszReferer URL адрес предыдущей страницы. Чаще всего этот параметр игнорируется серверами, но если вдруг сервер перестанет подавать признаки жизни, попробуйте задать его, может помочь.
lpszAcceptTypes Определяет тип содержимого допускаемого клиентской стороной. Иногда MS IE передаёт сюда вот такую длинную строчку: "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*", иногда это просто "*/*".
dwFlags Комбинация интернет флагов. Например, при использовании SSL соединений мы будем указывать флаг INTERNET_FLAG_SECURE. Так же нам будет полезен флаг INTERNET_FLAG_KEEP_CONNECTION, который позволяет удерживать соединение с сервером между запросами. Это бывает полезно, если мы хотим, чтобы сервер не забыл о нас во время сессий требующих входа по паролю.
Синтаксис Delphi
function HttpOpenRequest(hConnect: HINTERNET; lpszVerb: PChar;
lpszObjectName: PChar; lpszVersion: PChar; lpszReferrer: PChar;
lplpszAcceptTypes: PLPSTR; dwFlags: DWORD;
dwContext: DWORD): HINTERNET; stdcall;
hConnect Дескриптор сессии.
lpszVerb Задаёт имя команды запроса. Мы будем использовать методы "GET" и "POST".
lpszObjectName Имя целевого объекта. Это может быть просто HTML файл, скрипт или выполняемый модуль на сервере.
lpszReferer URL адрес предыдущей страницы. Чаще всего этот параметр игнорируется серверами, но если вдруг сервер перестанет подавать признаки жизни, попробуйте задать его, может помочь.
lpszAcceptTypes Определяет тип содержимого допускаемого клиентской стороной. Иногда MS IE передаёт сюда вот такую длинную строчку: "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*", иногда это просто "*/*".
dwFlags Комбинация интернет флагов. Например, при использовании SSL соединений мы будем указывать флаг INTERNET_FLAG_SECURE. Так же нам будет полезен флаг INTERNET_FLAG_KEEP_CONNECTION, который позволяет удерживать соединение с сервером между запросами. Это бывает полезно, если мы хотим, чтобы сервер не забыл о нас во время сессий требующих входа по паролю.
Подписаться на:
Комментарии (Atom)













