Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Интернет для Delphi-программиста


Информационный Канал Subscribe.Ru

Интернет для Delphi программиста.

Выпуск : № 57


Здравствуйте уважаемые подписчики рассылки "Интернет для Delphi программиста". Данная рассылка предназначена для всех кого интересует Delphi, здесь будут выкладываться ссылки на различные ресурсы интернета так или иначе связанные с Delphi: книги, исходники, программы... Изучайте Delphi один из лучших языков программирования!!!


ЗАДАТЬ ВОПРОС :

Правила рассылки: 
1. Не присылайте ответов на вопросы типа "да, нет".  
2. Если отвечаешь на вопрос - то отвечай подробно с примерами (желательно с исходником примера).
3. Тема вопросов - программирование на Delphi.
Внимание авторам: - Я не указываю ваши адреса из-за спама, но кто хочет, чтобы его email был - пишите, иначе только имя(ник).
Отправить вопрос


Новые вопросы.


Вопрос № 141 задаёт: ivp Ответить 
Использую в своей программе TWebBrowser. Хочется сделать интерфейс полностью на HTML. Можно ли как-то перехватить у IE переходы по ссылкам с целью заменить на свой набор внутренних команд (exit, minimize, свои обработчики на набор определенных комманд)?
Как, например, в окне "Центра обеспечения безопасности Windows" в WinXPsp2 или во многих драйверах сканеров (например от HP).
Вопрос № 142 задаёт: Кубік Василь  Ответить
Я хочу научиться работать з базами даних, InterBase, где я могу в Интернет прочитать об етом, спасибо!
Вопрос № 143 задаёт:  DeadLord Ответить
У меня возникла необходимость в реализазии md5-шифрования. Кто-нибудь может помочь советом/ссылкой/исходником/примером? Буду очень благодарен!!!!!!!!!!!!!!
Вопрос № 144 задаёт:  Ящик Ответить
Здравствуйте, подскажите пожалуйста, как заставить Windows размещать переменные и массивы моего приложения в физической памяти а не в файле подкачки?
Вопрос № 145 задаёт: amorfer  Ответить
Подскажите, пожалуйста, как отразить ход загрузки страницы в TWebBrowser с помощью прогрессбара и программно "отловить" наличие редиректов?

Ответы.

Вопрос № 129 задаёт: phoenix Ответить  
Как поместить прогу туда, где часы и язык???
Отвечает: Azamat 
Это тебе поможет... Animated TrayIcon VCL v3.X Professional Edition
Вопрос № 135 задаёт: Роман  Ответить
Программа в цикле производит некоторый порядок действий, чтобы не было 100% загрузки процессора я уменьшаю приоритет приложения и добавляю в тело цикла проверку на время одной тиерации:
if (Windows.GetTickCount - StartTime) < Iteration_Time then
  begin
    Application.ProcessMessages;
    Sleep(ABS(Iteration_Time - (Windows.GetTickCount - StartTime)));
    Application.ProcessMessages;
  end;
В итоге получается, что процессор то 100% занят, то свободен ... есть ли более изящное решение проблемы 100% загрузки процессора?
Отвечает: Azamat 
следует сделать дополнительный поток и в нем производить необходимые тебе вычисления.
потоку установить низщий приоритет.

момент.
Application.ProcessMessages - верная обработка.
но есть одно но, задумайся над тем каким образом VCL обрабатывает очереди сообщений.

Вопрос № 136 задаёт: Nikan  Ответить
Скажите, пожалуйста, как из определённого текста, который, например, загружен в Memo удалить все повторяющиеся строки. То есть, есть текст с фамилиями людей, нужно, чтобы в названии фамилий не было повторов!
Отвечает: Azamat 
Это очень просто...
var
   sl : TStrigns;
   i, j: integer;
begin
     sl := Memo1.Lines; // указываем на список строк
     i := 0;
     while i < sl.Count-1 do begin
           j := i + 1;
           while j < sl.Count do
                 if sl[j] = sl[i] then
                     sl.Remove(j)
                 else
                     j := j + 1;
           i := i + 1;
     end;
end;


Статья:    "Передача файлов посредством TClientSocket и TServerSocket на примере передачи скриншотов (Delphi)." http://vmcl.kiev.ua/

 Многих новичков (читать "ламеров" - не забывайте, на каком сайте находитесь... ну хорошо, в крайнем случае - "чайников") интересует вопрос о передаче файлов в программах, написанных на Delphi с использованием стандартных компонентов TClientSocket и TServerSocket. Довольно часто, посмотрев пример, идущий в поставке Delphi (тот, который расположен в папке "Demos\Internet\Chat"), новоиспечённый сетевой программист пытается применить его для передачи файлов произвольного размера без особых изменений кода. Таким образом, делая стандартную ошибку: протокол TCP (да и аппаратные средства), который используют эти компоненты для передачи данных, совершенно не гарантирует, что данные будут переданы одним непрерывным "куском", который Вы сможете принять, например, методом TCustomWinSocket.ReceiveBuf() за один приём. На самом деле, данные при передаче разбиваются на пакеты, имеющие определённый максимальный размер. Т. е., если Вы попытаетесь передать данные (файл), размером, скажем, 100 килобайт, то он будет принят некоторыми порциями, например, по 4 КБ.

 

         Бороться с таким "произволом" можно несколькими способами. Вот некоторые из них:
  • Передавать некоторый фиксированный символ, являющийся признаком конца порции данных (файла). Этот символ, конечно, не должен встречаться в самих передаваемых данных. Пример: данные передаются в кодировке BASE64, а символом конца порции данных является пробел (код 32 или 20h), которого в этой кодировке просто нет.
  • Снабжать каждую порцию передаваемых данных (каждый файл) служебным заголовком, который должен передаваться перед самими данными (файлом). В этом заголовке нужно указывать, как минимум, размер этих данных (этого файла), а также можно указывать некоторую дополнительную информацию, например: имя файла, его хеш или контрольная сумму, дату модификации и т. п.

 

     В данной, как бы громко ни звучало, статье рассмотрен второй способ: использование служебного заголовка. Задача же поставлена слудующая.

    Клиент должен:
  • Уметь соединиться с сервером.
  • При нажатии на кнопку "Get Screenshot" посылать запрос серверу на получение снимка экрана с компьютера, где запущен сервер.
  • При получении ответа от сервера записывать файл скриншота с некоторым уникальным именем в ту же папку, где находится исполняемый файл клиента.
    Сервер должен:
  • Уметь принять соединения клиентов.
  • При получении команды на отправку скриншота от клиента сделать оный и отправить его клиенту.

 

     Режим гнёзд используется не блокирующий.

     Собственно вот определение структуры заголовка из модуля "ScreenshotTransmit_Shared":
type
  PEmptyData = ^TEmptyData;
  TEmptyData = packed record
  end;

  PPacketHeaderSignature = ^TPacketHeaderSignature;
  TPacketHeaderSignature = packed array [0 .. 7] of Char;

  PPacketType = ^TPacketType;
  TPacketType = type LongWord;

  TPacketProtocolVersion = type LongWord;

const
  PacketHeaderSignature: TPacketHeaderSignature = 'ScrShtTr';

  ptQuery = TPacketType(1);
  ptReply = TPacketType(2);

  CurrentPacketProtocolVersion = TPacketProtocolVersion(1);

type
  PPacketHeaderHash = ^TPacketHeaderHash;
  TPacketHeaderHash = TMD5Result;

  PPacketDataSize = ^TPacketDataSize;
  TPacketDataSize = type LongWord;

  PPacketHeader = ^TPacketHeader;
  TPacketHeader = packed record
    Signature: TPacketHeaderSignature;
    ProtocolVersion: TPacketProtocolVersion;  // Incremental version number
    PacketType: TPacketType;
    DataSize: TPacketDataSize;  // Size of data placed in packet's TMainPacket.Data member
    DataHash: TPacketHeaderHash;  // Hash of data placed in packet's TMainPacket.Data member
    Reserved: packed array [0 .. 11] of Byte;
    HeaderHash: TPacketHeaderHash;
  end;

  PMainPacket = ^TMainPacket;
  TMainPacket = packed record
    Header: TPacketHeader;
    Data: TEmptyData;
  end;

         Краткие пояснения:
  • Signature: TPacketHeaderSignature
    Сигнатура заголовка
  • ProtocolVersion: TPacketProtocolVersion
    Порядковый номер версии протокола передачи демо-программы
  • PacketType: TPacketType
    Тип передаваемых данных: запрос (ptQuery) или ответ (ptReply)
  • DataSize: TPacketDataSize
    Размер передаваемых данных (вот оно!)
  • DataHash: TPacketHeaderHash
    MD5-хеш передаваемых данных (круто, да?)
  • Reserved: packed array [0 .. 11] of Byte
    Для выравнивания структуры (record'а)
  • HeaderHash: TPacketHeaderHash
    MD5-хеш самого заголовка (для однозначности перед рассчетом это поле инициализируется фиксированным значением, а именно нулевыми байтами)

 

     Упомяну также ещё один момент, касающийся темы, — получение снимка экрана. Оный занимает около 2 мегабайт при разрешении экрана 1024x768 и глубине цвета 24 или 32 бита. Дабы уменьшить нагрузку на сеть и ускорить процесс передачи, я использовал конвертирование изображения из формата BITMAP в формат JPEG (также я пробовал вместо конвертирования в JPEG упаковывать BITMAP с помощью библиотеки Zlib; результаты ещё лучше; думаю, со временем выложу сюда ещё и такой вариант). Собственно код:
function GetScreenshotBitmap: TBitmap;
var
  DC: HDC;
  R: TRect;
  Window: HWND;
begin
  Result := TBitmap.Create;
  with Result do
    try
      PixelFormat := pf24bit;
      Transparent := False;
      Window := GetDesktopWindow;
      DC := GetWindowDC(Window);
      try
        GetWindowRect(Window, R);
        Width := R.Right - R.Left;
        Height := R.Bottom - R.Top;
        BitBlt(Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
      finally
        ReleaseDC(Window, DC);
      end;
    except
      Free;
      raise;
    end;
end;

function GetScreenshotJpeg: TJpegImage;
var
  TempBmp: TBitmap;
begin
  TempBmp := GetScreenshotBitmap;
  try
    Result := TJPEGImage.Create;
    with Result do
      try
        Grayscale := False;
        CompressionQuality := 100;
        Performance := jpBestQuality;
        ProgressiveDisplay := False;
        PixelFormat := jf24Bit;
        Assign(TempBmp);
      except
        Free;
        raise;
      end;
  finally
    FreeAndNil(TempBmp);
  end;
end;

 

Скриншот "клиента"

 

Скриншот "сервера"

Скачать исходный код демонстрационных программ (Delphi 6).

Copyright © 2005 Vitaly Maclay

Замечания, пожелания и т. п. пишите на мой e-mail или стучитесь в ICQ 113662900.
При использовании материалов сайта ссылка на сайт и на автора статьи обязательны.


Компоненты:   

GhostMemo v1.0

Это TMemo, которое позволяет запретить такие действия, как копирование текста в буфер, вырезание текста в буфер, вставка текста из буфера. Так же можно запретить удалять текст, как с клавиатуры, так и с помощью мыши.

Memoes v1.0

Это TMemo позволяет создавать отступы от рамки, на которых, например, можно размещать компоненты. Посмотрите имеющийся в архиве скриншот, и все сразу станет понятно.

TFatMemo v0.95

Этот компонент напоминает Memo из mIRC. Имеется поддержка цветного текста, вставка рисунков и гиперссылок. В архиве имеется пример.

TMemoSearch v1.2

Это не визуальный компонент, который добавляет TMemo полноценные функции поиска и замены текста. Работает по "горячим клавишам": Ctrl+F - найти текст, F3 - найти далее, Ctrl+R - заменить текст.

RichMemo

Компонент предназначен для просмотра (редактирования) текста с выделением ключевых слов. Функциональность копонента включает в себя практически всю функциональность компонента Memo. Для решения задачи выделения ключевых слов компонент представляет собой альтернативую компоненту RichEdit.

RichView v0.5.2

TRichView - компонент для вывода форматированного текста. Среди особенностей: изменение стилей, шрифта, цвета. Возможно вставлять в текст любые компоненты Delphi и отображать фоновое изображение.

Graphic Rulers v1.0

Эти линейки можно применять в приложениях, работающих с графикой или текстом. Они имеют 4 типа величин: пика, пиксель, дюйм и сантиметр. TGraphicRuler - масштабируемый и прокручиваемый. TWordRuler - имеет позиции табуляции для урегулирования (установки) отступов в текстовых редакторах вроде RichView или Memo.

RsRuler v4.0

TRsRuler - линейки с 4 позициями размещениями (сверху, снизу, слева, справа). Масштабируются (Scale: 1-1000), есть возможность показать позицию курсора на линейке (Hairline). Может иметь стиль "Flat". Предусмотрена настройка шрифта. В архиве есть пример, в нем все очень хорошо продемонстрировано.

TVertRuler & THorizRuler v1.0

Еще две линейки (вертикальная и горизонтальная). Являются наследниками TPanel, предоставляет не очень большой набор настроек. Одним словом, не самый лучший компонент среди представленных в этом разделе.

VTControl

VTControl - это набор из нескольких компонент. Компоненты: 1) ExDDBGrid - сетка для просмотра таблиц баз данных с измененными оформлением и свойствами. 2) ButtonDBEdit - поле с кнопкой для редактирования полей баз данных. 3) ButtonEdit - просто поле с кнопкой (2 режима работы, обычный и Combo). 4) ScriptMemo - текстовый редактор с подсветкой синтаксиса, редактор заточен под VB (это касается комментариев). 5) ExInspector - RunTime инспектор объектов. + еще несколько компонентов.
Перед использованием прочитайте Описание.htm.
Сайт: http://visualtech.townnet.ru/components.htm.


Интересные и полезные сайты по Delphi: Если Вы хотите, чтобы Ваш сайт был в этом разделе пишите.
http://www.noil.pri.ee/     - Здесь вы можете почитать статьи, скачать исходники и компоненты, пообщаться на форуме.
http://www.delphi.int.ru/  - Ресурс для Delphi-программистов, где каждый найдёт что-то полезное!
http://www.ExCode.ru     - Программирование на высоком уровне
http://decoding.narod.ru - Сайт для Delphi-программистов со статьями автора, компонентами, FAQ, и другой полезной информацией.
http://www.p-lib.pp.ru/    - На сайте находится множество статей по Visual C++, Visual Basic, ASP.NET/ASP, Delphi, Java, Базам Данных, PHP, Perl и т. д. Кроме того есть каталог сайтов, свежие компьютерные новости, софт, книги и многое другое.

Немного юмора:  :))

:)

Если однажды ты пpидя домой не сможешь войти в системy с
rооt&#8217;овскими пpавами - значит дети yже выpосли...

:)

-Что мешает вашей карьере? -NO CARRIER... :(

:)

Root - только для тех кто в правду крут !

:)

Всех очень интересует вопрос: "Откуда программисты берут время для того, чтобы проводить его за компьютером?" 
Последние социологические опросы показали, что программисты находятся за компьютером то время, в течение которого они должны: 
1. Мыться 
2. Стричься 
3. Спать 
4. Кушать 
5. Размножаться. 
Именно поэтому 90% программистов - вонючие, лохматые, заспанные, голодные девственники. 

:)

День, когда Микрософт выпустит хоть что-то, что не будет тормозить, будет днем, когда они начнут производить автомобили :)

:)

Беседуют два программера: 
- Блин, вчера моя жена мне позвонила, а модем трубку снял..... 
- И че?????? 
- Да болтали полтора часа....

:)

Новое сообщение в Windows: "Пользователь грозится выполнить недопустимую операцию!"

:)

Установил как-то Админ сервер. Hе простой, а Hеприступный. Hикто его
сломать не может!
Админ загордился, решил дать объявление - тому, кто сломает
Hеприступный Сервер, даст награду немалую и пол-локалки в придачу. А
сам целую гроздь баннеров налепил, чтоб стал быть себе копеечку
заработать.
Узнал об этом Хаккер и давай Hеприступный Сервер хакать. Хакает он
его час, хакает другойю А тут вдруг как повылазят демоны из портов
разных, как загрузят Хаккера по полной программе - тут Хаккер
испугался и обхакался.
Залез Хаккер в чат, поплакался Hюкеру. Hюкер взял Пинги дубовыя, одел
DoSы железныя, пошел Сервер приступом брать. И кидал он Пингами, и
швырялся DoSами - не помогает. Стоит Hепреступный, не падает. А потом
вдруг Hеприступный Сервер как перестроил маршрут Hюкеру, как записал
себя на loopback. Hюкер Пинги кидает - а они в него попадают. Он
DoSами попробовал кинуть, а они вокруг него обвились да и повесили.
Висит он беднай, не шелахнетси.
А Вирмейкер тем временем затачивает свой Вирь Богатырь, сажает на
Коня Троянского да Админу подсылает. Говорит речи ласковые,
уговаривает Коня Троянского открыть, мол щастье там и $$$ куча. А
Админ ему только бормочет непонятно из /dev/random. Посылает,
наверное. Огорчинился Вирмейкер, с горя сам себе винчестер
отформатировал.
Расслабился Админ, сидит, зелено вино попивает.
Тут Уборщица проходила, мокрой тряпкой махнула, шваброй провод
потянула и Сервер навернула.
Вот и Серверу конец, а кто слушал - молодец!


Дружественные рассылки:

Рассылки Subscribe.Ru
Программирование на Delphi
Рассылка сайта Delphi coding


Все кто хочет изучить Delphi и реально научиться писать свои программы, ЦПИ "Эверест" поможет Вам.
Всё, что Вам нужно это компьютер и доступ к интернету - для получения уроков.

10 причин в пользу платного обучения в ЦПИ "Эверест"…

1. Когда Вы платите деньги- появляется дополнительный стимул против лени: надо учиться, ведь деньги уже уплачены….
2. Учась платно, получаете удобный для Вас график работы.
3. Весь необходимый справочный материал Вы получите в свое время и на русском языке.
4. Используя интернет в качестве бесплатной библиотеки, Вы получаете все ее минусы:

  • трата времени на поиск необходимого материала (а это потерянные деньги и время). А у Вас есть лишние время и деньги?;
  • отсутствие гарантии, что Вы "осилите" данный материал, ведь пишут его, в основном, не педагоги- профессионалы, а программисты- профессионалы, а они пишут для таких же, как они. А Вы программист- профессионал?
  • отсутствие системности в скачиваемом материале (ведь человек, писавший для Вас материал, не знает, чем Вы владеете). А Вы обладаете системой знаний по Delphi?;

5. Стоимость обучения одного месяца в ЦПИ "Эверест" сравнима с ценой хорошей книги. Но часто ли Вам попадались книги, рассчитанные именно на Вас. Мы же работаем индивидуально.
6. Автор книги или магазин не несет никакой ответственности за то, поняли ли Вы материал или нет, мы же закрепляем за каждым курсантом преподавателя, курирующего Вас.
7. Освоив программирование в Delphi - Вы освоите:

  • основы настоящего программирования- структурного и процедурного программирования ;
  • систему работы с базами данных и SQL- запросами, а это одно из самых перспективных направлений в программировании;
  • язык программирования ObjectPascal, что позволит Вам легко перейти, при желании, на С или Паскаль;
  • работу с компьютерной графикой;
  • при желании - основы низкоуровневого программирования ( Ассемблер).

8. А это значит, что …Мы предлагаем получить "высшее образование" - профессию программиста всего за 1 год и 144 доллара, любой ВУЗ попросит в 3 раза больше за один только семестр.
9. Вы получаете самый практический курс в сети, поскольку теория дается только тогда, когда она действительно необходима…
10. Учиться у нас легко и просто. Весь материал доступен и простым людям, не имеющим никогда дел с программированием….


По всем вопросам обращайтесь ко мне.

Если вы встретили в интернете интересный сайт или статью, да и вообще, что угодно связанное с Delphi, поделитесь ссылкой.
Если можете написать статью связанную с Delphi - присылайте с радостью выложу.
Давайте поможем друг другу!  Архив рассылки.

Предложения, критику и пожелания пишите на e-mail.


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiinternet
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное