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

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


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

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

Выпуск : № 46


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


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

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


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


Вопрос № 111 задаёт: Antony  Ответить
Подскажите алгоритм изменения параметров jpg-файлов. То есть имеется программа в которой указывается исходная папка с jpg файлами и указываются размеры и качество jpg файлов после обработки программой.
Один из таких алгоритмов я нашёл:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBItmap;
  jpg: TJpegImage;
  SearchRec:TSearchRec; 
begin
  jpg := TJpegImage.Create;
  If FindFirst(TempPath + '\*.jpg', faAnyFile, SearchRec)=0 then
 repeat  
  jpg.Loadfromfile(SearchRec.Name);
  bmp:= Tbitmap.Create;
//Задаются размеры
  bmp.Width := SpinEdit1.Value ; 
  bmp.Height:= SpinEdit2.Value; 
  bmp.Canvas.StretchDraw( bmp.Canvas.Cliprect, jpg );
  {Рисует превьюшку на форме}
//Возврат в формат JPG и сохранение изменённого файла.
  jpg.Assign( bmp );
  jpg.SaveToFile(ChangeFileext( SearchRec.Name, '_thumb.JPG' ));

 until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
 end;
Но этот алгоритм неудобен тем, что если в папке содержится много картинок (например 400-700), то программа во время выполнения преобразований не реагирует ни на что. А мне нужен алгоритм при исполнении которого программа реагировала бы на действия пользователя.
Вопрос № 112задаёт: Антон Трапезников Ответить
Не подскажите где можно найти пример реализации ассиметричного шифрования (что-нибудь типа RSA, GOST /etc). Мне нужны именно примеры реализации, либо модули на Delphi/Асм, а не ссылка на компоненты (многие из них закрыты).
Вопрос № 113задаёт: Vitek  Ответить
1.Скажите, пожалуйста, как узнать длину видео файла.
Пробую:

procedure Timer1.Timer(...);
begin
Label2.Caption := FormatDateTime ('hh:nn:ss', Player.Length / (1000 * 24 * 60 * 60))+
' / ' +
FormatDateTime ('hh:nn:ss', Player.Position / (1000 * 24 * 60 * 60));
end;

Но это работает только с аудио файлами

2.На форме есть ShellListView-ы, надо "таскать" файлы(папки) из одного
в другой, и в(из) среду (папки).

Вопрос № 114задаёт: СОЛИДОЛ  Ответить
Господа програмисты, всем доброго времени суток. Ситуация такая: есть мемо, в которое загружается досовский текст. Вопрос: реально ли и если да то как сделать так шоб русские символы отображались почеловечески, а после редактирования сохранять во все той же досовской кодировке.
И еще.
while not fileexists(cfn)<>true do sleep(100);
winexec(cfn,sw_show);

Где я провтыкал? По идее все это должно ждать пока данный экзешник не окажится "на своем месте", а потом запустится. Не запускается...
Всем неравнодушным заранее спасиба

Ответы.

Вопрос № 110 задаёт: Андрей Аношин  Ответить
Подскажите пожалуйста, кто работал с изображениями, как можно растянуть картинку не прпорционально. Например картинка имеет вид трапеции, а ее надо растянуть до прямоугольника.
Отвечает:   Евгений http://decoding.narod.ru
Вообще, для изменения размеров изображения применяют алгоритмы интерполяции. Но если с математикой туго, можно воспользоваться готовыми решениями.
procedure TForm1.FormCreate(Sender: TObject);
begin
   Image1.Picture.LoadFromFile( 'c:\test.bmp' );
   Image1.Stretch := true;
end;

или

procedure TForm1.FormCreate(Sender: TObject);
var
  b: TBitmap;
begin
   b := TBitmap.Create;
   b.LoadFromFile( 'c:\test.bmp' );
   Image1.Canvas.StretchDraw( Image1.ClientRect, b );
   b.Free;
end;
В первом случае параметр Stretch отвечает за то, должно ли изображение "вписываться" в размеры
компонента Image. Если Stretch = true, тогда, если изображение меньше Image, оно будет растянуто,
а если больше, то ужато. Во втором случае мы сразу интерполируем изображение под размеры Image.


Статья:    "Работа с TreeView - создание дерева каталогов." http://decoding.narod.ru/practic/treeview/treeview.html

Сегодня нам предстоит знакомство с одним очень интересным компонентом Delphi - TreeView. TreeView служит для показа ветвящихся иерархических структур, например - файловой структуры диска. TreeView содержит основные узлы, каждый из которых может содержать пиктограмму, текст и произвольный объект, и в свою очередь может иметь собственный список подузлов.

Для ввода списка в режиме прогона программы можно использовать свойство Item типа TTreeNodes, открывающее индексированный доступ ко всем узлам списка. Ниже приведен простой пример на использование этого свойства.


procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
   with TreeView1 do
   begin
      // Добавляем корневой узел
      Items.Add( nil, 'Корень' );
      // Добавляем 10 вложенных узлов
      for i := 1 to 10 do
         Items.AddChild( Items[i-1], IntToStr( i ) );
   end;
end;

Рассмотрим некоторые полезные свойства этого компонента:
  • TreeView1.Items.BeginUpdate - блокирует обновление экрана до тех пор, пока не будет выполнен метод EndUpdate. Используется при одновременной вставке нескольких элементов списка для предотвращения мерцания экрана.
  • TreeView1.Items.EndUpdate - отменяет действие метода BeginUpdate.
  • TreeView1.FullExpand - показывает все узлы дерева иерархии.
  • TreeView1.FullCollapse - прячет все узлы, кроме узлов самого верхнего уровня иерархии.
Вернемся к дереву каталогов. Первое, что мы сделаем при запуске программы, выведем в TreeView список всех дисков, имеющихся на компьютере. На этом этапе мы не станем проверять наличие каталогов на дисках, так как такая проверка на дисководе займет много времени. Проверять наличие каталогов будем в момент раскрытия узла. В свою очередь, в найденный каталогах мы попытаемся найти хоть одну папку. От результата поиска зависит, появится в данном узле знак "+", говорящий о наличии подкаталогов, или нет. Иконки для TreeView будем брать из файла FileCtrl.res, находящемся в каталоге "Delphi6\lib".


implementation

{$R *.dfm}
{$R FileCtrl}

procedure TForm1.FormCreate(Sender: TObject);
const
  IconNames: array [0..6] of string = ( 'CLOSEDFOLDER',
                                        'OPENFOLDER',
                                        'FLOPPY',
                                        'HARD',
                                        'NETWORK',
                                        'CDROM',
                                        'RAM' );
var
  node: TTreeNode;
  DriveType: integer;
  bm, mask: TBitmap;
  i: integer;
begin
   // Запрещаем обновление TreeView
   TreeView1.Items.BeginUpdate;
   // Создаем список иконок
   TreeView1.Images := TImageList.CreateSize( 16, 16 );
   bm := TBitmap.Create;
   mask := TBitmap.Create;
   for i := 0 to 6 do
   begin
      bm.Handle := LoadBitmap( HInstance, PChar( IconNames[i] ) );
      bm.Width := 16;
      bm.Height := 16;
      mask.Assign( bm );
      mask.Mask( clBlue );
      TreeView1.Images.Add( bm, mask );
   end;
   bm.Free;
   mask.Free;
   // Находим диски и выводим их в TreeView
   for i := 0 to 25 do
   begin
      DriveType := GetDriveType( PChar( Chr( i + 65 ) + ':\' ) );
      if DriveType = 1 then continue;
      node := Form1.TreeView1.Items.AddChild( nil, Chr( i+65 ) + ':' );
      case DriveType of
         DRIVE_REMOVABLE: node.ImageIndex := 2;
         DRIVE_FIXED: node.ImageIndex := 3;
         DRIVE_REMOTE: node.ImageIndex := 4;
         DRIVE_CDROM: node.ImageIndex := 5;
         else
            node.ImageIndex := 6;
      end;
      node.SelectedIndex := node.ImageIndex;
      node.HasChildren := true;
   end;
   // Обновляем TreeView
   TreeView1.Items.EndUpdate;
end;

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


procedure NextLevel(ParentNode: TTreeNode);
var
  sr, srChild: TSearchRec;
  node: TTreeNode;
  path: string;
begin
   node := ParentNode;
   path := '';
   repeat
      path := node.Text + '\' + path;
      node := node.Parent;
   until node = nil;
   // Находим первуб директорию
   if FindFirst( path + '*.*', faDirectory, sr ) = 0 then
   begin
      repeat
         if ( sr.Name <> '.' ) and ( sr.Name <> '..' ) then
            if ( sr.Attr and faDirectory ) = faDirectory then
            begin
               // Добавляем найденную папку в TreeView
               node := Form1.TreeView1.Items.AddChild( ParentNode, sr.Name );
               node.ImageIndex := 0;
               node.SelectedIndex := 1;
               // Утверждаем, что нет подкаталогов
               node.HasChildren := false;
               // Проверяем, так ли это
               if FindFirst( path + sr.Name + '\*.*', faDirectory, srChild ) = 0 then
               begin
                  repeat
                     if ( srChild.Name <> '.' ) and ( srChild.Name <> '..' ) then
                        if ( srChild.Attr and faDirectory ) = faDirectory then
                           node.HasChildren := true;
                  until ( FindNext( srChild ) <> 0 ) or node.HasChildren;
               end;
               FindClose( srChild );
            end;
      until FindNext( sr ) <> 0;
   end
   else
      ParentNode.HasChildren := false;
   FindClose( sr );
end;

procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
  var AllowExpansion: Boolean);
begin
   TreeView1.Items.BeginUpdate;
   node.DeleteChildren;
   NextLevel( node );
   TreeView1.Items.EndUpdate;
end;

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


procedure TForm1.Button1Click(Sender: TObject);
begin
   with TreeView1 do
   begin
      Items.BeginUpdate;
      FullExpand;
      Items.EndUpdate;
   end;
end;

Закрыть его вновь тоже не составит проблемы.


procedure TForm1.Button2Click(Sender: TObject);
begin
   with TreeView1 do
   begin
      Items.BeginUpdate;
      FullCollapse;
      Items.EndUpdate;
   end;
end;

Подведем итог. Задача построения структуры каталогов в виде дерева с использованием TreeView оказалась не сложной. Разберитесь получше с этим примером, и многие вопросы, связанные с использованием TreeView исчезнут. Удачи.

.: Пример к данной статье :.
Компоненты:   

ReaThinClient SDK v.1.7f

RealThinClient SDK : лёгкий путь для построения Интернет приложение.

Позволяет писать программы сервер/клиент, работающие через Интернет, а также ISAPI расширения (посылать/принимать файлы, писать/вызывать функции удаленного клиента, всё это в сочетании с дружелюбностью к файрволу.)

Особенности RTC SDK компонентов:
  • Стабильность работы
  • Дружелюбность к файрволу
  • Мульти-поточность
  • Высокий уровень защиты
  • Высокий уровень оптимизации
  • Поддержка plug-in
  • Легкие в работе и освоении.
Используй RTC Client компоненты для того что бы:
  • Вызывать функции удаленного клиента
  • Посылать и принимать сообщения
  • Закачивать и скачивать файлы
  • Удалёно запускать скрипты и программы.
Используй RTC Server компоненты для того что бы:
  • Писать функции для удаленного клиента
  • Посылать и принимать сообщения
  • Обрабатывать данные и файлы «на лету»
  • Строить динамические web-приложения
  • Передача файлов через сеть и Интернет
Написанный на RTS Сервер может быть, скомпилирован как(без модификации исходного кода):
  • Автономный сервер.
  • Сервер Windows NT/2000/ XP
  • ISAPI расширение, для выполнение на поддерживающем ISAPI Сервере
Приобретая, коммерческую лицензию RTC SDK вы получаете:
  • Полный исходный код RTC SDK компонентов
  • Полный исходный код всех RTC SDK примеров.
  • Бесплатное обновление на год.
Не коммерческую версию с полным исходным кодом RTC SDK компонентов можно скачать с http://www.realthinclient.com
Поддерживаемые версии: D2005 D4 D5 D6 D7

LMD-Tools SE v.7.03

LMD Tools Special Edition это коллекция из более 100 VCL компонентов, которые вы можете включить в свою приложение согласно свободной лицензии и без дополнительных файлов для распространения. Buttons, Dialogs, Multimedia, System, Data-aware, Container, Standard, Label и другие улучшенные компоненты доступны разработчикам для построения профессиональный приложений, быстрее и удобней чем раньше.
Если вы желаете расширить функциональные возможности существующих VCL компонентов, то LMD-Tools решение достойное Вас. Вместе с компонентами предоставляется большое количество примеров, которые демонстрируют возможности компонентов из библиотеки. Автоматическая установка и файл помощи также предоставлен. Для пользователей Delphi 8 и Delphi 2005 предоставлено поддержка как Win32 так и VCL.NET
Поддерживаемые версии: CB5 CB6 D2005 D5 D6 D7

Ultimate Color Picker Dialogs v.050929

Пакет рабочих диалогов для работы с цветом в Delphi. Один диалог для просмотра сохраненных цветов, и второй, для выбора любого цвета используя Оттенок / Насыщенность / Яркость.
Тестировалось на Delphi 3, 4, 5 и 2005(Win32 и .NET) Также работает в Delphi 2 с небольшими внешними дефектами.
Поддерживаемые версии: D2005 D2006 D3 D4 D5 D6 D7

Animated Menus 3.0 c исходниками

компонент для создания Main Menu и PopUp Menu.  (размер 1,24 Mb).

Business Skin Form без исходников  

компонент для создания Main Menu и PopUp Menu.  (размер 1,24 Mb).

Codepage c исходниками 

компонент, позволяющий осуществлять перекодировку Win>Dos>KOI8>MAC. (размер 21,4 Kb).

ComboBoxEx c исходниками 

CombоBox с дополнительными возможностями. (размер 266 Kb).

DBISAM версия 4.19 для Delphi 7 c исходниками 

один из самых быстрых компонентов для доступа к БД в своем формате. Неплохая поддержка SQL, есть свой SQL сервер. Скачать (размер 4,45 Mb).

EasyTable версия 6.01 без исходников

еще один компонент для доступа к БД в своем формате. Развитый SQL.  (размер 3,27 Mb).

Gauge c исходниками 

два неплохих ProgresBar. (размер 41 Kb).

Halcyon 6.96 c исходниками для Delphi 7

немного подправленный компонент для доступа к БД в формате DBF без BDE.  (размер 595 Kb).

MinMod c исходниками

маленький компонент, позволяющий даже модальню форму свенуть на панель задач вместе с основной. (размер 67,4 Kb).

EMS Query Builder 2.95 с исходниками D4-D2005 

компонент для построуния SQL-запросов. (размер 312 Kb).

PDJXP Pack 2.80 для Delphi 5-7 без исходников

набор компонентов в модном XP-стиле. (размер 228 Kb).

TextEffect c исходниками

набор компонентов текстовых эффектов (Text Fade, Text 3D и Text Anim). (размер 51,3 Kb).

ZipTV 7.0.6 для Delphi 7 без исходников

компонент, позволяющий работать с архивами. (размер 1,07 Mb).

ZipForge 2.02 c исходниками 

еще один компонент для работы с архивами.  (размер 204 Kb).


Интересные и полезные сайты по Delphi: Если Вы хотите, чтобы Ваш сайт был в этом разделе пишите.
http://www.noil.pri.ee/ - Здесь вы можете почитать статьи, скачать исходники и компоненты, пообщаться на форуме.
http://www.delphi.int.ru/ - Ресурс для Delphi-программистов, где каждый найдёт что-то полезное!
http://www.ExCode.ru - Программирование на высоком уровне
http://decoding.narod.ru - Сайт для Delphi-программистов со статьями автора, компонентами, FAQ, и другой полезной информацией.

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

Дайте кряк для телевизора - достал уже баннерами!


Не сыпь мне соль на клаву...


Я только что нашел последнюю ошибку...


Обнаружено новое устройство -- "прямые руки"!


Дневник молодого программиста.
Первый день. Запустили все игрушки и отформатировали все дискеты.
Второй день. Запустили все утилиты и отформатировали все винчестеры.
Третий день. Запустили все, что грузится, и отформатировали все, что крутится.
Четвертый день. Приехал хакер, и тут такое началось... 


- Маша, давай прошвырнемся в кино?
- ?????
- Hу давай хоть в кабак сходим...
- ???? ?? ???
- А-а, понял, кодировка глючит...


Встечаются два ламера, один другому говорит:
- Слушай, если я Винду ЧЗ поставлю, сколько она на винте занимать будет?
- Ну, где-то гигбайт...
- Блин, вот это МикроСофт!!!


Глюк - это по немецки счастье...


В системе слишком много глюков? Удалите system32.dll и перегрузитесь.


А Вы видели как быстро и надежно работает Windows? - Я тоже не видел.


Тихо поскриптывая, работал сервер...



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

Рассылки 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
Архив рассылки
Отписаться
Вспомнить пароль

В избранное