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

Выпуск : № 26


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


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

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


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


Вопрос № 48 задаёт: #One® Ответить
Как добраться до количества CD приводов, назначенных им букв и типу ? Например, на закладке Win 3.1 есть DriveComboBox. Нужно отображать только CD ROM'мы, а не всё подряд.
Вопрос № 49 задаёт: ceyhun aslanov Ответить
Я хочу удалить запис с базы .db. В этой базе у меня есть Graphic поля. Я хочу удалить запис рисунок которого на DBImage. Как это сделать.
Извините, но плохо зная русский
Вопрос № 50 задаёт: wvw Ответить
Пишу программу "Редактор настроек Windows" на подобии "WinSEr", подскажите пожалуйста как в свойствах "Пароли" под Win98 в закладке "Удаленное управление" программно добавить определенного пользователя или удалить его?
Вопрос № 51 задаёт: TIM Ответить
У меня есть вопрос: как можно запретить запись в Журнал (History) и (или) очистить при выходе именно через реестр? Пробовал NoRecentHistory но не работает или это не правильно и что озночает этот параметр - NoDriveTypeAutoRun?
Помогите если вас не затруднить.
Заранее благодарен!
Вопрос № 52 задаёт: Алмаз Рафитович Ответить
Как сделать так, чтобы при перемещении файла методом Drag&Drop или &Dock в ListBox в нем появлялась строка с именем и путем к этому файлу.
Заранее благодарен.
Вопрос № 53 задаёт: Константин Ответить
Хочу задать ещё один вопрос, помогите пожалуйста.
Знначит так, я пишу небольшую программку, но она работает несовсем корректно. При этом я даже немогу понять где ошибка: (.
Программа читает из реестра определенные данные, заносит их в массив, обрабатывает, при сохранении - заносит обратно в реестр.
				  //чтение из реестра, занесение в массив
  if reg.OpenKey(regpath+'\rm', true) then
   begin
    for i:=0 to 255 do data[i].TOff:=-2; //это понадобится в дальнейшем
    for i:=0 to 255 do
     begin
      if reg.ValueExists('TOffTime_'+IntToStr(i))=false then
        begin //если НЕсуществует значение, то
         last:=i-1; //переменой last присваивается номер последнего существующего знач.
         break; //выход из цикла
        end;
     end;
   end;
  for i:=0 to last do
   begin //заносим все значения в массивы
    data[i].TurnOffTime:=reg.ReadDateTime('TurnOffTime_'+IntToStr(i));
    data[i].TurnOff:=reg.ReadInteger('TurnOff_'+IntToStr(i));
    data[i].TurnOffAt:=reg.ReadBool('TurnOffAt_'+IntToStr(i));
   end;
  reg.CloseKey;
 end;
//при сохранении в реестр:
if reg.OpenKey(regpath+'\Rm', true) then
 begin
  for i:=0 to 255 do
   begin
    if data[i].TurnOff<>-2 then //пока не достигнуто посл. значение
    // (-2 = последнее, т.к. весь цикл сначала заполнился -2, а
    // затем заполяется нормальными значениями. То, что не заполнилось
    // осталось "-2" - значит оно следует за последним значением)
     begin
      reg.WriteDateTime('TurnOffTime_'+IntToStr(i), data[i].TurnOffTime);
      reg.WriteInteger('TurnOff_'+IntToStr(i), data[i].TurnOff);
      reg.WriteBool('TurnOffAt_'+InttoStr(i), data[i].TurnoffAt);
      //...сохраняем...
     end;
   end;
//А теперь код изменения значений в массиве (после чего следует сохранение (см. выше))
for i:=0 to 255 do
 begin
  if data[i].TurnOff=-2 then //если это пустой элемент...
   begin
    //..сохраняем в него новые изменения
    data[i].TurnтOff:=ToffComboBox.ItemIndex;
    data[i].TurnOffTime:=StrToTime(tm);
    data[i].TurnoffAt:=TOffAtRadioButton.Checked;
   end;
 end;
//А ошибка в том, что при первом сохранении реестр заполняется всеми двумястами пятидесятью шестью ключами, причём все однотипные ключи (TurnOff_1, TurnOff_2 ...; TurnOffTime_1, TurnOfTime_2,...) заполняются одинаковыми значениями!

Ответы.

Вопрос № 45 задаёт: Алмаз Рафитович Ответить
Как из своей программы запустить другую?
Отвечает: #One®
Есть функция WinExec. Найдёшь её в справке Windows SDK:
UINT WinExec(

    LPCSTR lpCmdLine,   // address of command line 
    UINT uCmdShow       // window style for new application 
   );
Например, можно вот так:
  WinExec('D:\Files\Borland Studio Projects\CD_opn\CD.exe',SW_SHOW)
Также есть функция CreateProcess. Но она посложнее.

			
Отвечает: Zoi
ShellExecute(Handle,NULL,"имя файла",NULL,NULL,SW_RESTORE);
Отвечает: Андрей Ерёмин
http://www.delphi.int.ru/modules/expert/showquestion.php?id=45
Отвечает: Жиляев А http://www.sassoft.narod.ru
WinExec('Полная директория,где прога',SW_SHOWNORMAL);
Отвечает: Black Raider
Запуск приложения из Дельфи:
Надо подключить модуль ShellAPI (добавить в uses)
    
Res:=ShellExecute(0,'open','postav.exe','','',SW_SHOW);
    if (Res < 32) then
       Writeln('Error execute postav.exe - error: '+IntToStr(Res));
Отвечает: SHKoder
winexec('prog1.exe',0)
или
shelexecute(more params)
Отвечает: Skyscraper Recluse
Использовать одну из функций WinAPI: CreateProcess(), WinExec() или ShellExecute().
Отвечает: Vadim
procedure TFormDemo.ButtonInstallClick(Sender: TObject);
var
  sCapt, sMes, FileName: String;
begin
  //TODO: Инсталяция AcrobatReader5 (ar500enu.exe)
  FileName:='E:\Install\Viewers\ar500enu.exe';
  //
  if not FileExists(FileName)
     then begin
            sCapt:='Ошибка';
            sMes:='  Не найден файл '+FileName+' ';
            Application.MessageBox(PChar(sMes),PChar(sCapt), MB_OK + MB_DEFBUTTON1);
            exit;
          end;
  winexec(PChar(FileName), SW_NORMAL);
end;
Отвечает: Тимур Рамазанов
см. функцию ShellExecute
Вопрос № 46 задаёт: Алмаз Рафитович Ответить
В Delphi 7 был компонент, который делает интерфейс программы XPшным. Теперь у меня Delphi 5, как мне найти выход из ситуации?
Отвечает: Андрей Ерёмин
Прикрепить WindowsXP.res. Подробнее здесь: http://www.delphi.int.ru/modules/expert/showquestion.php?id=5
P.S. А зачем переходить с Delphi 7 на Delphi 5? :)
Отвечает: SHKoder
вернуться на делфи7
Вопрос № 47 задаёт: sasha chepurin Ответить
Здравствуйте! У меня есть вопрос и хотелось бы получить на него ответ.
Как можно остановить выполнение цыкла при нажатие на клавишу?
Примером может быть запуск и остановка секуномера, относительно графике: остановка движущегося объекта при нажатии, скажем, на клавишу управления курсором ("вверх", напимер,) VK_UP. Благодарен за ответ.
Отвечает: Андрей Архангельский
Самое простое опрашивать клавишу в каждом цикле или через несколько.
Отвечает: SHKoder
break
Отвечает: Skyscraper Recluse
Простой способ: использование компонента TTimer. Этот компонент через заданный интервал инициирует своё событие OnTimer. Можно итерацию прерываемого цикла поместить в обработчик этого события. Переменная синхронизации теперь может быть просто булевой, проверяться каждый раз при вызове обработчика OnTimer и устанавливаться в зависимости от действий пользователя.

Более сложный способ: использование потоков. Код прерываемого цикла необходимо вынести в отдельный поток (thread). Этот объект автоматически инкапсулируется в производный от TThread класс (File -> New -> Thread Object). Метод Execute этого класса должен содержать Ваш код прерываемого цикла.

Далее необходим объект синхронизации. Для указанной задачи хватит События (Event), юнит SyncObjs. Событие имеет два состояния: включенное (set) и выключенное (reset). Смысл переменной этого типа - сигнал о событии прерывания цикла.

На каждой итерации прерываемого цикла необходимо проверять переменную События методом TEvent.WaitFor(0) (* ожидание события 0 мс *); возврат wrSignaled означает, что к моменту проверки Событие было установлено, и цикл должен быть прерван.

В основной программе по действию пользователя по прерыванию необходимо установить Событие методом TEvent.SetEvent. Перед запуском прерываемого цикла Событие естественно должно быть выключенным.

Отвечает: Vadim
Для перехвата нажатия клавиши свойство формы KeyPreview устанавливаем в True.
Далее, событию формы OnKeyDown пишем процедуру, в которой проверяем код нажатой
клавиши и делаем соответствующие действия, если это интересующая нас клавиша.
Например, можно "поднять флаг" - установить в True какую-нибудь доступную для
всей формы переменную типа Boolean, которая проверяется в цикле; или остановить
некий Timer-секундомер. Процедура перехвата нажатия, например:
procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
//TODO: Анализируем клавишу VK_UP (или код 38)
 IF key=VK_UP
 then begin
        Timer1.Enable:=False;
        bUpKey:=True;
        exit;
      end;
end;
				


Исходники:

Система

Assign files
Исходник программы, которая сохраняет в файл содержимое данной папки либо нескольких папок с подкаталогами. Очень удобно для сравнения одинаковых данных, находящихся на разных компьютерах.
Смотреть скриншот.

Files Catalogs Colors
Исходник программы, предназначенной для начинающих программистов (примеры работы с файлами и каталогами (создание, удаление, переименование), создание ярлыка программы, определение пути к программе, определение размеров логических дисков, работа с TCanvas и многое другое).
Смотреть скриншот.

Exe in exe
Исходник программы, которая сохранят в *.exe два любых файла с возможностью их последующего извлечения
смотреть скриншот.

Windows commands
Исходник программы, показывающей примеры работы со стандартными функциями Windows API (выключение компьютера, перезагрузка, отключение/включение мыши, клавиатуры, свернуть все окна и т.д.)
Смотреть скриншот.

Reestr Tweak XP
Исходник программы, с помощью которой пользователь может быстро изменять скрытые настройки Windows XP, не прибегая к редактированию реестра и прочих опций системы вручную (в примере описаны не все скрытые настройки Windows, остальные содержатся в архиве в виде *.htm файлов)
Смотреть скриншот.

Clipboard
Исходник программы, показывающей работу с буфером обмена, содержащим текстовую или графическую информацию.
Смотреть скриншот

Мультимедиа

Mp3-плеер
Постоеный на стандартных компонентах мп3 плеер обладает всеми основными ф-иями обычного плеера.
Автор Алексей Смыщляев
Смотреть скриншот.

Просто исходники

ListBox ComboBox
Исходник программы, предназначенной для начинающих программистов (примеры работы с ListBox, ComboBox, TabSheet, Font, Cursors, Label и т.д.).
Смотреть cкриншот.

Memo Edit Errors Messages
Исходник программы, предназначенной для начинающих программистов (примеры работы с Button, Memo, Edit, InputBox, MessageDlg, Drag and Drop, перетаскивание формы за ее поле и т.д.)
Смотреть скриншот.


Модули для Delphi:

Длинная арифметика
Модуль для работы с "длинной арифметикой".
В архиве находиться пример работы с модулем.
Автор: Kerk

Стеганография
Модуль для записи и чтения любых файлов из 24-разрядных Bitmap'ов.
Автор Hint

Работа с разделами жесткого диска
Модуль для получения информации о разделах (дисках). Получение списка FDD, HDD, CD-ROM и проч. в системе.
Автор: cyborg

Работа с оперативной памятью
Класс, реализующий проецирование файлов в память. Возможность чтения/записи/вставки данных.
Автор: R D I

Динамические массивы 
Модуль, который организует динамический масив. Причём можно его при создании легко организовать как в памяти, так и на диске. Можно циплять под него и свои типы данных, только не к базовому класу, а к TPointerArray.
Автор: moonter


Иконки:

На настоящий момент присутствуют изображения из одиннадцати разных категорий, мало это или много решать вам.
Коллекция иконок, для оформления приложений очень хорошего качества
Полный список всех доступных изображений находиться по адресу:
http://www.noil.pri.ee/?mod=down/catd&id=15


Книги:  Взяты с сайта http://delphin.xost.ru/index.htm

БД - хранилище объектов. Анатолий Тенцер. 43 Kb
Здесь описываются принципы создания базы данных, ее базовые тезисы, объекты, свойства, строковые и численные атрибуты, исторические и перечислимые атрибуты, связи, расширение БД. Описывается как налаживать учет, проблемы и пути их решения, ослабленный контроль за целостностью данных, понижение быстродействие при выборке данных, сложность в понимании структуры и выборке данных и построение клиентской части.

Синхронизация процессов при работе с Windows. Анатолий Тенцер. 26,8 Kb
Задача синхронизации встает при одновременном доступе нескольких процессов (или нескольких потоков одного процесса) к какому-либо ресурсу. Здесь также описываются ее функции, объекты, события, Semaphore, Waitable timer, Mutually Exclusive, критические секции, процесс и поток.

Электронная книга .: Иллюстрированный самоучитель по Kylix 1,2 Mb

Введение
Для операционной системы Linux долгое время не было достаточно простой среды быстрой разработки приложений. Многие программисты, которые успешно создают программы для Windows, используют среду Borland Delphi. В нашей стране Delphi пользуется особой популярностью как среди начинающих разработчиков, так и среди профессионалов. Многие из них готовы создавать программы для среды Linux, но не было среды, похожей на Delphi.

Наконец, летом 2001 года фирма Borland выпустила среду для быстрой разработки приложений в среде Linux и назвала ее Kylix (Kylix — это античная винная чаша, расписанная с внешней и внутренней стороны). На первый взгляд, эта среда — практически копия Delphi, но есть некоторые отличия. Причем эти отличия являются довольно опасными, т. к. одна и та же команда в Delphi и Kylix может привести к совершенно разным последствиям. Данная книга представляет собой краткий обзор среды Kylix версии Kylix Server Developer. С помощью нее вы узнаете особенности среды Kylix и ее отличия от Delphi. Кроме того, заключительная часть книги расскажет вам о методах переноса приложений из Delphi в Kylix и создании межплатформенных приложений.

Для кого предназначена эта книга

Книга предназначена для всех желающих изучить среду Kylix и научиться создавать работоспособные программы под Linux. Стиль изложения материала — от простого к сложному, приведены многочисленные примеры. Конечно, желательно, чтобы читатель был знаком (хотя бы поверхностно) с операционной системой Linux и программированием. Данная книга будет читаться еще легче, если вы знакомы с программированием в Delphi.

В данном объеме невозможно охватить все аспекты программирования в Kylix, поэтому в конце книги приводится список литературы и ссылки на сайты в Интернете, из которых читатель сможет почерпнуть отсутствующую в книге информацию.

Интересные и полезные сайты по Delphi: Если Вы хотите, чтобы Ваш сайт был в этом разделе пишите.

http://www.noil.pri.ee/ - Здесь вы можете почитать статьи, скачать исходники и компоненты, пообщаться на форуме.


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

Программер женился. Первая брачная ночь:
- Дорогой, у тебя что в столе мыши!!!????
- Мышь на столе... В столе - старый винчестер.


OS/2 - полуось
PS/2 - ???


некие гении изобрели вирус который устанавливает на комп. Windows95.


Реальность - это интерфейс для доступа к компьютеру.


Нет повести печальнее на свете, чем повесть о дымящемся чипсете.


Программер познакомился с девушкой. Она ему: 
- Можно я буду называть тебя Адамом? 
- А почему? 
- Ты у меня первый. 
- Ладно, но тогда я буду называть тебя Виндой. 
- А почему? 
- А ты у меня двухтысячная... 


Два программиста пытаются завести автомобиль. 
Все бесполезно. Один другому говорит: 
- Может выйдем и еще раз зайдем?


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

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


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

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

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

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

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

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

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


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

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

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

Сайт создан в системе uCoz