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

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


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

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

Выпуск : № 48


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


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

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


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


Вопрос № 118 задаёт: Сергей Ставский  Ответить
Увожаемые программеры!
Есть вопрос: как на дельфи написать прогу, которая будут выполнять ряд
действий в ворде (вид-колонтитул;вставка-автотекст- Filename and path)
желательно не только теория. но и пример.
Спасибо.
Вопрос № 119задаёт:  Mogilin Alexej Ответить
Подскажите пожалуйста, где можно найти более-менее подробную информацию по компонентам семейства Indy и их использованию( в электронном виде). Желательно на русском языке
Вопрос № 120 задаёт: Vitek  Ответить
Скажите, пожалуйста, есть-ли dll-хи или компоненты, которые проигрывали (декодирывали) медиа-файлы,или надо писать самому, если самом, то как?
Вопрос № 121 задаёт: Денис  Ответить
Здравствуйте уважаемые эксперты! У меня вот какой вопрос: как превратить ячейку StringGrid'a в многострочный редактор типа TMemo другими словами добавить свойство Lines.
Заранее благодарю.
Вопрос № 122 задаёт: Корытник Александр  Ответить
Здравствуйте. У меня такой вопрос: Как с помощью компонетны TMediaPlayer выделять из проигрываемого файла 8-16 частотных каналов и узнать уровень каждого канала (0-100%)?

Ответы.

Вопрос № 115 задаёт: Константин Завальный  Ответить
Здраствуйте! Подскажите, пожалуйста, можно ли в Delphi реализовать обработку параметров с которыми должно запускаться приложение. Ну в смысле "project.exe -a:665 -b", типа того. Как получить значения этих параметров, и можно ли вообще это сделать?
Отвечает: Евгений http://decoding.narod.ru 
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  s: string;
begin
   if ParamCount > 0 then
   begin
      for i := 0 to ParamCount do
         s := s + ParamStr( i ) + #13;
      ShowMessage( s );
   end;
end;

ParamCount - количество параметров. Всегда есть как минимум один параметр (нулевой)- полный путь к файлу.

ParamStr(i) - сам параметр.
Отвечает: Роман Антонов
Есть в Delphi такие функции ParamStr и ParamCount
Синтаксис: ParamStr(Imdex)
Index - номер параметра командной строки возвращаемой функцией.
ParamCount - возвращает общее количество переданных в программу параметров.
Если Index превышает ParamCount то возвращается пустая строка, если Index равен 0 то возвращается имя исполняемого файла программы с полным путем к нему.
Удачи!
Отвечает: #One  
Для твоего примера "project.exe -a:665 -b":
System.ParamStr(0)='project.exe'
System.ParamStr(1) = '-a:665'
System.ParamStr(2) = '-b'
System.ParamCount = 3 (project.exe тоже считается параметром)

В хелпе это всё есть, сам посмотри
Отвечает: Ar 
следующий пример кода проверяет наличие ключа /safe
if not FindCmdLineSwitch('safe', ['/', '-'], True) then
ShowMessage ('Приложение запущено в безопасном режиме!');
Отвечает: Брудер 
Конечно можно. В Delphi можно ВСЁ!!!(или почти всё)
program project; //имя проекта
uses windows;    //подкл-ые модули
var //пиши чё хочешь
//ну тут какие-нибудь процедурки
{1}
begin
  if ParamCount > 0 then begin //если есть параметры то
    if ParamStr(1) = '-a' then //если первый параметр равен '-a', тогда...
     begin
      //твой код...
     end;
    if ParamStr(2) = '-b' then //если второй параметр равен '-b', тогда...
     begin
      //твой код...
     end;
  end;
end.
А если нужно для приложения с формой то впиши от {1} в событие формы Show.
Можно и так:
if ParamStr(1) = '/a' then ...
if ParamStr(1) = '/b' then ...

Надеюсь разницу ты увидел :)
Как получить значения этих параметров:
if ParamStr(1)<>'' then //если параметр есть, то
 begin
  edit1.text:=ParamStr(1); //Текст "едита" становится равным параметру.
  form1.caption:=ParamStr(0); //Загаловок формы принимает значение "имя EXE" (напр. Project);
 end;
Совет ВСЕМ программистам на Delphi:
Скачайте с сайта http://delphiworld.narod.ru/ программу DelphiWorld и статьи к ней (там же). Разархивируйте. Установите статьи. (мануал см. на сайте). И получите 5005 статей по Delphi!!! Там есть ответы на ВСЕ ваши вопросы! Статьи пополняются!
Лично я уже около года пользуюсь этим проектом и не жалею.
Отвечает: Denisss  
Да, это возможно:
function ParamCount: Integer; // возвращает количество параметров
function ParamStr(Index: Integer): string;

// Возвращает параметр с номером Index
// Index = 0 - возвращает полный путь к программе
Отвечает: SHKoder  
Paramcount - показывает сколько параметров передано
Paramstr(0) - это имя с путем твоей программы
Paramstr(1) - имя первого параметра
Paramstr(2) - имя второго параметра и т.д.

Если ты запускаешь:
с:\myprog.exe /a -b22 c:\dev
то Paramcount будет равен 3
Paramstr(0) будет равен с:\myprog.exe
Paramstr(1) будет равен /a
Paramstr(2) будет равен -b22
Paramstr(3) будет равен c:\dev

Параметер это просто строка, набор букв, выполнить ее нельзя - ты можешь только проверить на наличие строки и если она присутствует, то выполнить какое либо действие, это действие ты должен написать сам, никаких стандартных действий нет.
Например у тебя возможно 3 параметра:
Если параметер = "/v" то выдать сообщение, если параметер "/c" то покрасить форму в синий цвет, если параметер "/f" - поменять заголовок формы:
if paramstr(1) = '/v' then
  showmessage('Parameter "/v" was found!');

if paramstr(1) = '/c' then
  color := clBlue;

if paramstr(1) = '/f' then
  caption := 'Parameter "/f" was found';
Поставь этот код на событие формы onActivate, откомпиллируй и попробуй запустить программу с одним из 3х указанных параметров и ты увидишь что произойдет.

delphiworld - мощьный справочник

Отвечает: Lenskiy 
Используй API GetCommandLine.
Отвечает: Burich-Caeser 
Как вариант, используйте GetCommandLine. Результат строковой;
содержит полный путь к приложению + параметры.
Или
for i:=0 to ParamCount do
 ShowMessage(ParamStr(i));
Отвечает: Кама 
После запуска параметры доступны ч/з функции ParamCount (количество) и ParamStr (строка параметра).
Например:
if ParamCount > 0 then
  if ParamStr(1) = '-b' then bla-bla-bla
Отвечает: СПУ 
ParamCount - Число переданных параметров
ParamStr(N) - N -ый параметр


Статья:    "Создание дерева файлов в виде меню с ассоциированными иконками." http://decoding.narod.ru/practic/treemenu/treemenu.html


Навигацию по файловой системе можно организовать разными способами. Наиболее распространенные - с использованием ListView и/или TreeView, иногда для навигации по дискам используется ComboBox (самый распространенный пример: Explorer). Сейчас мы рассмотрим еще один вариант, с использованием MainMenu.

Прежде, чем мы приступим, скажу пару слов про этот метод. Работа с таким меню очень напоминает работу с TreeView (расположение элементов меню по своей структуре ничем не отличается от расположения узлов TreeView). Для более комфортной навигации, каждому элементу меню можно присвоить иконку, ассоциированную с файлом или каталогом, но который он указывает. В отличие от TreeView, в меню не нужно каждый раз щелкать мышкой, чтобы просмотреть список дочерних элементов. Коротко о неприятном. Если мы раскрываем узел с большим количеством дочерних элементов, то нам предстоит долгое ожидание, пока все элементы будут прорисованы, прежде чем они отобразятся на экране. В это время пользователь может подумать, что программа зависла (такая вот неприятная мелочь).

Тем не менее, раз взялись, будем делать. Процедура, строящая дерево каталогов, будет работать рекурсивно.


(* Рекурсивная процедура, строящая дерево каталогов *)
procedure UpdateMenu( Path: string; Parent: TMenuItem );
var
  sr: TSearchRec;
  ShInfo: TSHFileInfo;
  MenuItem, MenuItemZero: TMenuItem;
begin
   if FindFirst( Path + '*.*', faAnyFile, sr ) = 0 then
   repeat
      // Запрашиваем индекс иконки в системном списке
      if Form1.GetIcon.Checked then
         SHGetFileInfo( PChar( Path + sr.Name ), 0, ShInfo, SizeOf( ShInfo ),
                        SHGFI_TYPENAME or SHGFI_SYSICONINDEX );
      if ( sr.Name <> '.' ) and ( sr.Name <> '..' ) then
      begin
         if ( sr.Attr and faDirectory ) = faDirectory then
         begin
            MenuItem := TMenuItem.Create( Form1 );
            MenuItem.Caption := sr.Name;
            Parent.Add( MenuItem );
            // Если нужно, рисуем иконку
            if Form1.GetIcon.Checked then
               MenuItem.ImageIndex := ShInfo.iIcon;
            UpdateMenu( Path + sr.Name + '\', MenuItem );
            // Проверяем, пустой каталог или нет
            if MenuItem.Count = 0 then
            begin
               MenuItemZero := TMenuItem.Create( Form1 );
               MenuItemZero.Caption := 'Пусто';
               MenuItem.Add( MenuItemZero );
            end;
         end
         else
         begin
            MenuItem := TMenuItem.Create( Form1 );
            MenuItem.Caption := sr.Name;
            MenuItem.Hint := Path + sr.Name;
            MenuItem.OnClick := Form1.MnuClick;
            Parent.Add( MenuItem );
            // Если нужно, рисуем иконку
            if Form1.GetIcon.Checked then
               MenuItem.ImageIndex := ShInfo.iIcon;
         end;
      end;
      Application.ProcessMessages;
      if Form1.Tag = 0 then
      begin
         Form1.StatusBar1.Panels.Items[0].Text := 'Поиск прерван';
         Break;
      end;
   until FindNext( sr ) <> 0;
end;

(* Прерываем поиск *)
procedure TForm1.EndSearchClick(Sender: TObject);
begin
   Tag := 0;
   BeginSearch.Enabled := true;
end;

Подробно рассматривать эту процедуру не стану (надеюсь, вы знакомы с рекурсией), но несколько моментов объясню. Функция SHGetFileInfo возвращает информацию о файле (директории, диске), о ней я расскажу подробнее чуть ниже. Наше меню позволяет запускать найденные файлы программой, связанной с ними по расширению. Для того чтобы связать пункт меню и файл, на который он указывает, путь к файлу можно занести в свойство Hint пункта меню. Процедуру, открывающую файл, присвоим событию OnClick пункта меню (эта процедура описана ниже). В конце цикла идет проверка поля Tag на равенство нулю. В нашем случае Tag показывает, идет в данный момент поиск (Tag <> 0, например он равен 1), или нет (Tag = 0). Перед началом поиска устанавливаем значение поля Tag в 1, и теперь, чтобы его прервать, это поле достаточно обнулить.


(* Процедура запуска файлов из меню *)
procedure TForm1.MnuClick(Sender: TObject);
begin
   ShellExecute( Handle, 'open', PChar( ( Sender as TMenuItem ).Hint ),
                 nil, nil, SW_SHOWNORMAL );
end;

Теперь, когда все готово к поиску, посмотрим, как происходит его вызов.


(* Запуск поиска файлов *)
procedure TForm1.BeginSearchClick(Sender: TObject);
var
  SysImageList: UINT;
  SFI: TSHFileInfo;
begin
   if DirectoryExists( PathEdit.Text ) then
   begin
      // Очищаем меню
      MainMenu1.Images.Free;
      // Если пользователь хочет видеть иконки ...
      if GetIcon.Checked then
      begin
         // Создаем список иконок
         MainMenu1.Images := TImageList.Create( Self );
         case RadioGroup1.ItemIndex of
            0: // Запрашиваем маленькие иконки
               SysImageList := SHGetFileInfo( '', 0, SFI, SizeOf( TSHFileInfo ),
                                              SHGFI_SYSICONINDEX or SHGFI_SMALLICON );
            1: // Запрашиваем большие иконки
               SysImageList := SHGetFileInfo( '', 0, SFI, SizeOf( TSHFileInfo ),
                                              SHGFI_SYSICONINDEX or SHGFI_LARGEICON );
         end;
         // Назначаем системный список иконок нашему меню
         if SysImageList <> 0 then
         begin
            MainMenu1.Images.Handle := SysImageList;
            MainMenu1.Images.ShareImages := true;
         end;
      end;

      Tag := 1;
      BeginSearch.Enabled := false;
      StatusBar1.Panels.Items[0].Text := 'Очистка главного меню ...';
      MnuRoot.Clear;
      MnuRoot.Caption := IncludeTrailingPathDelimiter( PathEdit.Text );
      StatusBar1.Panels.Items[0].Text := 'Ждите, работаю ...';
      UpdateMenu( IncludeTrailingPathDelimiter( PathEdit.Text ), MnuRoot );
      StatusBar1.Panels.Items[0].Text := 'Работа закончена';
      BeginSearch.Enabled := true;
      Tag := 0;
   end;
end;

Здесь нас, прежде всего, интересует первая половина кода (со второй все и так понятно). Если пользователь хочет видеть иконки файлов в меню, мы должны запросить их у системы. Для этого воспользуемся функцией SHGetFileInfo. Рассмотрим аргументы этой функции. Первый - путь к файлу (если файл указан, мы получим информацию по этому файлу, если этот параметр пустой, мы получим "глобальные" данные). Второй - атрибуты. Третий - указатель на структуру TSHFILEINFO (именно в нее будет занесена информация). Четвертый - размер структуры TSHFILEINFO. Пятый - флаги, говорящие системе о том, какую информацию мы у нее запрашиваем.

В процедуре BeginSearchClick, в зависимости от того, что хочет пользователь, мы запрашиваем системный список маленьких (SHGFI_SMALLICON) или больших (SHGFI_LARGEICON) иконок. В процедуре UpdateMenu мы запрашиваем номер иконки (SHGFI_TYPENAME) для файла или каталога, указанного в первом параметре.

Имейте в виду, получение иконок заметно снижает скорость поиска.

На сегодня все. Успехов в программировании.

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

Исходники  

Start Button move v.1.0

Простая программа, которая перемещает меню «Старт» с лева направо и справа на лево.


Компоненты:   

mxProtector 1.30 с исходниками - неплохой компонент, позволяющий сделать вашу программу шароварной, триальной, защитить паролем, серийником и т.д.  (размер 156 Kb).

mxStatusBar 1.12 с исходниками - отличный статус бар с кучей возможностей.  (размер 124 Kb).

 Tee Chart Pro 7.0 с исходниками- отличный компонент для п3строения всяческих графиков, диаграмм и т.д.  (размер 1,25 Mb).

Etv Library 3.5 с исходниками - библиотека DB компонент для Borland Delphi 3-7.  (размер 600 Kb).

PHP4Delphi library 6.0 с исходниками - PHP4Delphi is a Delphi interface t5 PHP for Delphi 5, 6 and 7.  (размер 644 Kb).

psvDialogs Library 2.2 с исходниками - расширение стандартных диалоговых окон.  (размер 276 Kb).

BarMenu Components 2.3.9 с исходниками - неплохая альтернатива Animated Menus - омпонент для создания Main Menu и PopUp Menu.  (размер 528 Kb).

Pivot Cube VCL 6.7 Standart Edition без исходников (демо с ограничением на 5000 записей) - в представлении не нуждается. Компонент для реализации гиперкубов.  (размер 5,67 Мb).

Dimageen 2.1.4 без исходников - компонент для работы с изображениями. Имеет аналог DBImage. (размер 3,07 Мb).

FindFile 3.40 с исходниками - отличный компонент для поиска файлов.  (размер 107,7 Kb).

SMExport 4.77 без исходников D7-D2005 - аналог EMS Quick Export. Компонент для экспорта данных из любого DataSet в различные форматы.  (размер 760 Kb).

SMImport suite 2.27 c исходниками - аналог EMS Quick Import. Компонент для импорта данных в любой DataSet.  (размер 560 Kb).


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

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

С точки зрения Microsoft, клавиатура - это один большой Reset. Ибо, куда ни нажми, все равно повиснет и перезагрузится.


... Программа обновляет системные файлы. Это может занять вечность...


А кто тут вставил сразу три дискеты?


Если бы все баги были насекомыми, windows был бы похож на огромный муравейник.


Людям свойственно ошибаться, но окончательно все запутать может только компьютер.


Надпись при загрузке: "Во избежания падения при торможении держитесь за поручни"


Подготовка к первому запуску Windows.(Слабонервных просьба удалится)


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


"Что тебе не хватает!" - спросил программист у компьютера.
"УПС" - ответил компьютер и сгорел от перенапряжения.


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


Вопрос: Чем лучше 95 Винда по сравнению с 98?
Ответ: Если 95 и зависает, то сразу; а 98-ая ещё думает, зависла она или нет.



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

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

В избранное