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

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


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

Выпуск : № 58


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


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

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


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


Вопрос № 146 задаёт: Роман Ответить 
как получить список логических дисков на удаленном компьютере?
Вопрос № 147 задаёт: Benedikt  Ответить
Здравствуйте уважаемые эксперты. Тут такая проблемка. Надо просмотреть HTML-код веб-страницы. Допустим такой вариант:
{--------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
var Document:IHtmlDocument2;
HtmlCollection: IHtmlElementCollection;
HtmlElement: IHtmlElement;
I: Integer;
begin
webBrowser1.Navigate('http://www.yandex.ru/index.html');
while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages;

Memo1.Lines.Clear;
Document:= WebBrowser1.Document as IHtmlDocument2;
HtmlCollection := Document.All;
for I := 0 to HtmlCollection.Length - 1 do
begin
HtmlElement := HtmlCollection.Item(i, 0) as IHtmlElement;
Memo1.Lines.Add(HtmlElement.innerHTML);
End;
end;
{-----------------------------------------------}

Но в данном варианте меня не устраивает то, что для получения HTML-кода надо предварительно загрузить саму страницу. Можна ли получить HTML-код без загрузки страницы ( т.е. чтобы загружалась не сама страница, а только ее HTML-код) ?

Ответы.

Вопрос № 141 задаёт: ivp Ответить 
Использую в своей программе TWebBrowser. Хочется сделать интерфейс полностью на HTML. Можно ли как-то перехватить у IE переходы по ссылкам с целью заменить на свой набор внутренних команд (exit, minimize, свои обработчики на набор определенных комманд)?
Как, например, в окне "Центра обеспечения безопасности Windows" в WinXPsp2 или во многих драйверах сканеров (например от HP).
Отвечает:   Евгений http://decoding.narod.ru
1) Создаешь страницу примерно такого содержания

test.htm

<HTML>
  <BODY>
     <A href='#Min'>Минимизировать</A><br>
     <A href='#Max'>Максимизировать</A><br>
     <A href='#Msg'>Показать сообщение</A><br>
     <A href='#Close'>Закрыть программу</A>
  </BODY>
</HTML>

2) Грузишь ее
procedure TForm1.FormCreate(Sender: TObject);
begin
   WebBrowser1.Navigate( 'C:\test.htm' );
end;
3) Отлавливаешь клик на ссылке
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
var
  s: string;
begin
   if Pos( '#', URL ) > 0 then
      s := Copy( URL, Pos( '#', URL )+1, 10 );
   if AnsiUpperCase( s ) = 'MIN' then
      Self.WindowState := wsMinimized;
   if AnsiUpperCase( s ) = 'MAX' then
      Self.WindowState := wsMaximized;
   if AnsiUpperCase( s ) = 'MSG' then
      ShowMessage( 'Test message' );
   if AnsiUpperCase( s ) = 'CLOSE' then
      Close;
end;
Как видишь, все просто...
Отвечает:  мэйл_рфдл2
Обрабатывайте сообщение - OnBeforeNavigate2
Вопрос № 142 задаёт:  Кубік Василь Ответить
Я хочу научиться работать з базами даних, InterBase, где я могу в Интернет прочитать об етом, спасибо!
Отвечают: Андрей Германович и   Руткис Руслан Иванович
http://www.ibase.ru
Вопрос № 143 задаёт:  DeadLord Ответить
У меня возникла необходимость в реализазии md5-шифрования. Кто-нибудь может помочь советом/ссылкой/исходником/примером? Буду очень благодарен!!!!!!!!!!!!!!
Отвечает:  Tmp
Используй компоненты из Lockboxa. Найти можно везде. Вот только md5 - это не шифрование, а хэширование.
Вопрос № 145 задаёт:  amorfer Ответить
Подскажите, пожалуйста, как отразить ход загрузки страницы в TWebBrowser с помощью прогрессбара и программно "отловить" наличие редиректов?
Отвечает: Евгений http://decoding.narod.ru 
(как отразить ход загрузки страницы в TWebBrowser с помощью прогрессбара?)
// Грузим страницу
procedure TForm1.Button1Click(Sender: TObject);
begin
   ProgressBar1.Position := 0;
   WebBrowser1.Navigate( 'www.yandex.ru' );
end;

// Показываем прогресс
procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
  ProgressMax: Integer);
begin
   ProgressBar1.Max := ProgressMax;
   ProgressBar1.Position := Progress;
end;
Отвечает: мэйл_рфдл2  
Обрабатывайте событие - OnProgressChange


Статья:    "Работа с иконками рабочего стола." http://vmcl.kiev.ua/

Рассмотрим простую задачу: получить подпись и координаты каждой из иконок рабочего стола. Для начала нужно найти дескриптор объекта SysListView32, отображающего эти иконки. Сделаем это с помощью следующей функции:

function GetDesktopListViewHandle: HWND;
var
  S: packed array [0 .. 127] of Char;
  Res: Integer;
begin
  Result := FindWindow('ProgMan', nil);
  Result := GetWindow(Result, GW_CHILD);
  Result := GetWindow(Result, GW_CHILD);
  Res := GetClassName(Result, S, SizeOf(S) - 1);
  if (Res = 0) or (String(S) <> 'SysListView32') then
    Result := 0;
end;

     И казалось бы всё просто - вызвал нужную API-функцию и получил данные. Однако дескрипторы окон класса 'SysListView32', в отличие от дескрипторов обычных окон (собственно окон, стандартных кнопок BUTTON, полей редактирования EDIT и т. п.), не являются уникальными в пределах системы, а только в пределах процесса. К тому же API-функции для работы с этими объектами (ListView_*) в качестве параметров ожидают указатели на адреса в виртуальном адресном пространстве (ВАП) того процесса, который создал такой объект.

     В борьбе с данным непотребством пригодятся функции для работы со сторонними процессами и их памятью: OpenProcess(), VirtualAllocEx(), WriteProcessMemory(), ReadProcessMemory(), VirtualFreeEx(). Но следует заметить, что функций VirtualAllocEx() и VirtualFreeEx() нет в Windows 9x/ME.

В качестве примера можно привести такую несложную процедуру, которая в демонстрационной программе является вызывается по нажатию кнопки "Go":

procedure TAppForm.GoButtonClick(Sender: TObject);
const
  PROCESS_ACCESS = PROCESS_VM_OPERATION or PROCESS_VM_READ or
    PROCESS_VM_WRITE; // Доступ, необходимый для операций
type
  PProcData = ^TProcData;
  TProcData = record
    Item: TLVItemA;
    Txt: packed array [0 .. 1023] of AnsiChar;
    ItemRect: TRect;
  end;
var
  LV: HWND;
  Cnt, I: Integer;
  ProcID: DWORD;
  ProcessHandle: THandle;
  Data: TProcData;
  RemoteProcData: PProcData;
  Res: Boolean;
  LI: TListItem;
  ColWid: Integer;
begin
  MainListView.Clear;

  // Нахождение дескриптора ListView "рабочего стола"
  LV := GetDesktopListViewHandle;
  if LV = 0 then
  begin
    MessageDlg('Desktop''s SysListView32 not found.', mtError, [mbOK], 0);
    Exit;
  end;

  // Получение ID процесса по дескриптору ListView
  ProcID := 0;
  GetWindowThreadProcessId(LV, ProcID);
  if ProcId = 0 then
  begin
    MessageDlg('Cannot retrieve process ID.', mtError, [mbOK], 0);
    Exit;
  end;

  // Открытие доступа к стороннему процессу
  ProcessHandle := OpenProcess(PROCESS_ACCESS, False, ProcID);
  if ProcessHandle = 0 then RaiseLastOSError;
  try
    // Выделение памяти в ВАП нужного нам процесса
    RemoteProcData := VirtualAllocEx(ProcessHandle, nil,
      SizeOf(RemoteProcData^), MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
    if RemoteProcData = nil then RaiseLastOSError;
    try
      Cnt := ListView_GetItemCount(LV);  // Получение количества иконок
      for I := 0 to Cnt - 1 do
      begin
        FillChar(Data, SizeOf(Data), 0);  // Обнуление структуры

        // Заполнение структуры LV_ITEM (точнее LV_ITEMA)
        with Data.Item do
        begin
          iSubItem := 0;
          pszText := @RemoteProcData^.Txt;
          cchTextMax := SizeOf(RemoteProcData^.Txt) - 1;
        end;

        // Копирование структуры из ВАП нашего процесса в структуру,
        //   находящуюся в ВАП нужного нам процесса
        Res := WriteProcessMemory(ProcessHandle, RemoteProcData,
          @Data, SizeOf(Data), PLongWord(nil)^);
        if not Res then RaiseLastOSError;

        // Получение надписи под иконкой
        SendMessage(LV, LVM_GETITEMTEXT, I, LPARAM(@RemoteProcData^.Item));

        // Получение координат ограничивающего иконку прямоугольника
        SendMessage(LV, LVM_GETITEMRECT, I, LPARAM(@RemoteProcData^.ItemRect));

        // Чтение полученных данных из "чужого" ВАП в наш
        Res := ReadProcessMemory(ProcessHandle, RemoteProcData,
          @Data, SizeOf(Data), PLongWord(nil)^);
        if not Res then RaiseLastOSError;

        // Добавление параметров иконки
        LI := MainListView.Items.Add;
        LI.ImageIndex := 0;
        LI.SubItems.Add(IntToStr(I));
        LI.SubItems.Add(Data.Txt);
        with Data.ItemRect do
          LI.SubItems.Add(Format('%4d, %4d  ---  %4d, %4d',
            [Left, Top, Right, Bottom]));
      end;
    finally
      // Освобождение памяти
      Res := LongBool(VirtualFreeEx(ProcessHandle, RemoteProcData,
        0, MEM_RELEASE));
      if not Res then RaiseLastOSError;
    end;
  finally
    // Закрытие дескриптора открытого процесса
    CloseHandle(ProcessHandle);
  end;

  // Наведение "красоты"
  if MainListView.Items.Count > 0 then ColWid := -1 else ColWid := -2;
  for I := 2 to MainListView.Columns.Count - 1 do
    MainListView.Column[I].Width := ColWid;
end;

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

Copyright © 2004-2005 Vitaly Maclay

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


Компоненты:   

GradBtn v1.4 
Кнопка с разнообразными вариантами градиентной заливки. 3D текст на кнопке с возможностью выравнивания. Все цвета настраиваются. Одним словом очень красивая кнопка.

CollBtn 
Очень не плохая кнопка, сделанная на основе обычного Button. Можно менять ее цвет, делать плоской, создавать эффект более объемного нажатия.

TKozyTetris v1.2 
Компонент для создания игр типа Tetris. Поддерживает стандартные фигуры и фигуры, определенные разработчиком.

TFatScrollbar v1.0 
TFatScrollBar - это плоская (flat) полоса прокрутки. Не имеет никаких трехмерных возможностей. Особенности: настройка цвета для каждой из областей полосы прокрутки (стрелки, кнопки со стрелками, дорожка, скроллер). Компонент подойдет для программ с нестандартным интерфейсом.

WaveAudio 
WaveAudio - пакет для работы с wave-файлами. Позволяет выполнять любые операции с ними: не только воспроизведение, но и редактирование. Идеальная вещь для создания звукового редактора.

TExTrackBar v2.0 
TrackBar с расширенной функциональностью. Можно сделать полоску тонкой или убрать ползунок. Но главное, что может этот TrackBar, это показывать разметку, соответствующую возможным положениям ползунка.

TjanTracker v1.0 
Нестандартного вида TrackBar, полностью настраиваемый. Отображает свою позицию непосредственно на ползунке.

XiTrackBar v1.0 
Нестандартного вида, очень красивый, TrackBar. Большое количество настроек, особенно касающихся цветовой схемы. Хорошо подойдет для программ с нестандартным интерфейсом.


Интересные и полезные сайты по 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 и т. д. Кроме того есть каталог сайтов, свежие компьютерные новости, софт, книги и многое другое.

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

:)

Прислала Ольга:
Сидят два программиста на лавочке, возле двухэтажного дома, и пьют пиво. Вдруг окно второго этажа открывается и оттуда мужик падает, но тут же вскакивает, отряхивается и забегает в дом. Буквально через минуту мужик опять с окна падает, опять отряхивается и бежит снова в дом. И так несколько раз. Первый программист, задумчиво:
- Глюк...
Второй неспеша попивая из банки, добавляет:
- Да... Где-то в цикле.

:)

- Что значит "Грабь награбленное"? спросил сын своего папу-программиста. 
- Это когда пиратский аудио-диск перегоняешь в mp3.

:)

Звонок в фирму по продаже компьютеров и комплектующих: 
- Здрасьте, у Вас жидкие мониторы есть? 
Продавец нашелся сразу: 
- Вам сколько литров: 15, 17, 19...??

:)

Хорошие программы - как птенцы: их надо долго высиживать на яйцах...

:)

Чтобы писк Instant Messenger (ICQ, Jabber), оповещающий о приходе
сообщения, не мешал окружающим, нужно поставить туда ультразвуковой
wav-файлик. Тогда оповещать о приходе сообщения будет своим лаем
собака.

:)

Обновление Windows изменило интуитивно ясный интерфейс Вашего
компьютера. Загрузите обновление интуиции с сайта Microsoft.

:)

Из разговора двух сетевых червей:
- Я ползаю по юниксам, валю один за другим. Кайф!
- А я ползаю по виндам. Никакого кайфа. Никогда не поймешь, толи ты
завалил, толи само упало.

:)

Молодой спец спрашивает у хакера:
- А почему у меня Internet не работает?
- А у тебя Ти-Си-Пи-Ай-Пи (TCP-IP) стоит?
- Конечно стоит! Но как ты его назвал!


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

Рассылки 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.


В избранное