Навигация
Главная »  Delphi 

[ 1 ] 2 3

  Разработка SDI и MDI приложений (исходники, документация)
Источник: articlesdocument.write('.');org  В delphi реализован шаблон mdi application, позволяющий быстро построить начальный код приложения mdi. Рассмотрим основные функции этого инструментального средства. Чтобы использовать шаблон mdi application, примените команду file/new меню delphi, из раскрывшегося диалогового окна выберите страницу projects, а затем mdi application. Определите каталог для проекта, и delphi произведет копирование файлов, которые вам необходимы для простого приложения mdi с инструментальной линейкой, строкой состояния и меню. При формировании этих составных частей шаблона будут производиться запросы. На полученной форме размещены следующие компоненты: opendialog, imagelist, actionlist. Форма, порожденная шаблоном, содержит стандартные элементы: главное меню, панель, используемую как инструментальная линейка, компонент statusbar1 и некоторые системные диалоговые панели.

  Автозагрузка в Delphi (исходники)
Источник: pcnextDarkmaster Очень часто программы прописывают себя в автозагрузку. Зачем это нужно? Да, в общем-то, цели разные. Иногда бывает нужно, чтобы программа грузилась вместе с операционной системой, например, как электронный органайзер. Или если вы пишите троян или вирус - это тоже может пригодиться. Цели разные и способы тоже. Мы рассмотрим самые популярные способы. В принципе стандартным способом автозагрузки в Windows XP является реестр.

  Об одном способе разграничения прав пользователей в приложениях Delphi (документация, исходники)
Источник: delphimasterРощупкин А.В. Аннотация.   В статье рассмотрен один из возможных способов разграничения прав доступа пользователей в многопользовательском приложении. Предложенный метод основан на хранении в базе данных сведений о компонентах формы и их соответствии кодам пользователей. Примеры прилагаемого программного кода адаптированы под базу данных Microsoft Access. В тексте статьи имеются примеры для баз данных Oracle. База данных.

  Советы по программированию на DELPHI (ч.2)
Источник: articlesdocument.write('.');orgМихаил Христосенко Как реализовать undo и redo в tmemo. В текстовых редакторах, как правило, необходимо реализовать функции undo и redo. Ведь без них раьота с программой становится просто неудобной, а порой и опасной (можно случайно потерять какие-нибудь данные!!!). Поэтому в этот раз мы поговорим с вами о том как же это сделать. Для начала нам надо узнать, можно ли выполнить undo. Для этого напишите: if memo1.perform(em_canundo, 0, 0) 0 then begin {есть что отменять можно включить пункт меню с соответствующей надписью} end; Теперь реализуем функцию undo: memo1.perform(em_undo, 0, 0); Вставьте эту конструкцию между begin и end предыдущего примера. Для того, чтобы реализовать функцию redo, вам необходимо еще раз вызвать функцию undo Обработка исключительных ситуаций.

  Советы по программированию на DELPHI (ч.1)
Источник: articlesdocument.write('.');orgМихаил Христосенко Строку в нижний регистр. (api) Для преобразования строки в нижний регистр нужно воспользоваться функцией ansilower.Описание:function ansilower(str: pchar): pchar;где str - исходная нуль терминированная (то есть оканчивающаяся символом с номером #0) строка. Возвращаемое значение - строка в нижнем регистре.Функция находится в файле user32.dllПример применения:edit1.text:=ansilower(pchar(edit1.text)); Подобным образом можно преобразовать строку в верхний регистр.Для преобразования строки в верхний регистр нужно воспользоваться функцией ansiupper. Описание: function ansiupper(str: pchar): pchar; //где str - исходная нуль терминированная строка.Возвращаемое значение - строка в нижнем регистре.Функция находится в файле user32.dll Пример применения:edit1.text:=ansiupper(pchar(edit1.text)); Сколько времени прошло с момента перезагрузки. (api) Чтобы определить сколько времени прошло с момента последней перезагрузки системы необходимо воспользоваться функцией getcurrenttime: longint; Возвращаемое значение: время в миллисекундах.Пример использования:edit1.text:=floattostr(getcurrenttime/1000)+' секунд с момента перезагрузки'; Вычисляем координаты курсора на экране. (api) Решить эту задачу нам поможет функция: getcursorpos(var point: tpoint); где, point - принимающая переменная типа tpoint.Пример использования:procedure tform1.timer1timer(sender: tobject);var t:tpoint;begingetcursorpos(t);form1.caption:=inttostr(t.x)+' - '+inttostr(t.y);end; Определяем тип носителя. (api) Функция function getdrivetype(drive: integer): word; поможет нам в этом.

  Советы по программированию на DELPHI (ч.4)
Источник: articlesdocument.write('.');orgМихаил Христосенко Изменение шрифта у всплывающих подсказок unit unit1; interfaceusessysutils, wintypes, winprocs, messages, classes, graphics, controls, forms, dialogs, stdctrls; typetform1 = class(tform) edit1: tedit; procedure formcreate(sender: tobject); private { private declarations } public { public declarations } end; varform1: tform1; implementation {$r *.dfm} typetmyhintwindow = class (thintwindow) constructor create (aowner: tcomponent); override; end; constructor tmyhintwindow.create (aowner: tcomponent);begininherited create (aowner); canv. Как проверить готовность диска a:\ function diskindrive(const drive: char): boolean;vardrvnum: byte;emode: word;beginresult := true; // было falsedrvnum := ord(drive);if drvnum >= ord('a') then dec(drvnum,$20);emode := seterrormode(sem_failcriticalerrors);trywhile disksize(drvnum-$40) = -1 do begin // при неудаче выводим диалогif (application.messagebox('Диск не готов...'+chr(13)+chr(10)+ 'Повторить?',pchar('Диск '+uppercase(drive)),mb_okcancel+ mb_iconexclamation{iconquestion})=idcancel) then begin result:=false; break; end; end; finallyseterrormode(emode);end;end; Перекодировка текста proced. Как подавить реакцию на ctrl+alt+del? В некоторых случаях (например, при работе в полноэкранном режиме, показе своей презентации или экранной заставки ...) бывает полезно заблокировать перечисленные комбинации.

  Советы по программированию на DELPHI (ч.5)
Источник: articlesdocument.write('.');orgМихаил Христосенко Как узнать имя пользователя версию windows и т.д. В uses пpописываешь модуль registry и дальше так:varr:tregistry;no:string;beginr:=tregistry.create;r.rootkey:=hkey_local_machine;r.openkey('\software\microsoft\windows\currentversion', false) {если false то пытается откpыть не создавая}no:=r.readstring('versionnumber');if no=..... then ...... else ......end;Кроме того, обязательно посмотрите на список функций winapi, имена которых начинаются с get.... Например, getcomputername, getversionex, getsysteminfo, systemparametersinfo. Как скопировать экран в tcanvas? var bmp: tbitmap; dc: hdc; begin bmp:=tbitmap.create; bmp.height:=screen.height; bmp.width:=screen.width; dc:=getdc(0); //Дескpиптоp экpана bitblt(bmp.canvas.handle, 0, 0, screen.width, screen.height, dc, 0, 0, srccopy); bmp.savetofile('screen.bmp'); releasedc(0, dc); end; Как извлечь иконку из exe или dll Процесс получения иконок из .exe, .dll или .ico файлов полностью идентичен. Различие только в том, что в .ico файле может храниться только одна иконка, а в .exe и .dll несколько.

  Советы по программированию на DELPHI (ч.3)
Источник: articlesdocument.write('.');orgМихаил Христосенко Получение имени пользователя. Для этого мы конечно же воспользуемся реестром. Там вообще прячется очень много полезной информации, но надо знать, где она лежит. Итак, чтобы использовать реестр, необходимо добавить модуль registry в uses. Затем надо объявить переменную типа tregistry, а дальше открыть нужный ключ и прочитать оттуда все, что хочется. Например, в событии формы oncreate напишите: var r:tregistry;beginr:=tregistry.create; {создаем экземпляр объекта}r.rootkey:=hkey_local_machine;r.openkey('software\microsoft\windows\currentversion', false);{#сюда потом запишем необходимые операторы} r.free; {уничтожим объект}end; Чтобы прочесть какие-нибудь данные нужно воспользоваться функцией readstring (если вам надо прочесть строку, чтобы прочитать число нужно воспользоваться функцией readinteger...). Допустим вы хотите, чтобы имя пользователя и название организации выводились с помощью метки.

  Как посадить приложение «на диету»!
Источник: codingclub Задумывались ли Вы, дорогой читатель, почему приложения, созданные с помощью Delphi или C++ Builder, имеют большой размер? Если Вы - «коренной» пользователь Дельфи (начали «обживаться» в этой среде еще со второй версии), то навеняка заметили, что с каждой следующей версией программы размер исполняемого файла неуклонимо растет. Возьмем, например, простейшее приложение - пустое окно, откомпилируем его на Delphi 5 и запишем размер входящего файла - 286 Кб. Теперь проделаем то же самое на Delphi 6 и запишем размер - 351 Кб. Сравните записанные результаты: разница составит аж 65 Кб. Конечено, теперь это не проблема, но что если Вы распотраняете приложение по Сети? Или, например, пишете программу вроде инсталлятора? (Какой смысл в инсталляторе, если он сам «весит» больше, чем распотраняемое приложение?) Примеров можно привести множество. Причина проблемы... Но почему размер приложения «пустого» окна настолько велик, если в том же Visual C++ или Ассемблере эта цифра не превышает и десятка килобайт? Ответ кроется в архитектуре приложения, создаваемого на Дельфи и С++ Builder.

  Советы по программированию на DELPHI (ч.6)
Источник: articlesdocument.write('.');orgМихаил Христосенко Вращение изображения procedure rotateright(bitmap : timage); var firstc, lastc, c, r : integer; procedure fixpixels(c,r : integer); var savepix, savepix2 : tcolor; i, newc, newr : integer; begin savepix := bitmap.canvas.pixels[c,r]; for i := 1 to 4 do begin newc := bitmap.height-r+1; newr := c; savepix2 := bitmap.canvas.pixels[newc,newr]; bitmap.canvas.pixels[newc,newr] := savepix; savepix := savepix2; c := newc; r := newr; end; end; begin if bitmap.width bitmap.height then exit; bitmap.visible := false; with bitmap.canvas do begin. Завершение всех работающий приложений Ниже приведен код, который поможет вам завершить ВСЕ задачи без всяких уведомлений о необходимости сохранения данных. Поэтому, прежде чем запустить этот код, убедитесь в наличии сохраненных данных и в том, что пользователь осведомлен об этой операции.procedure tform1.buttonkillallclick(sender: tobject);varptask : ptaskentry; task : bool; thistask: thandle; begingetmem (ptask, sizeof (ttaskentry)); ptask^.dwsize := sizeof (ttaskentry); task := taskfirst (ptask); while task do begin if ptask^.hinst = hinstance then thistask := ptask^.htask else terminateapp (ptask^.htask, no_uae_box); task := tasknext (ptask); end; terminateapp (thistask, no_uae_box); end; Использование анимированных курсоров const crmycursor = 1; procedure tform1.formcreate(sender: tobject);begin// Загружаем курсор. Единственный способ для этого screen.cursors[crmycursor] := loadcursorfromfile('c:\mystuff\mycursor.ani');// Используем курсор на форме cursor := crmycursor; end;.

  Графические часы (исходники, документация)
Источник: articlesdocument.write('.');org delphi позволяет рисовать почти где угодно. Можно рисовать на форме, можно рисовать на метке, можно даже рисовать непосредственно на экране! Но лучше использовать всё-таки специальный компонент timage, уже хотя бы потому, что этот компонент сам будет следить затем, что бы при перерисовке окна твоей программы, твои каракули тоже перерисовывались. Если ты нарисуешь что-то, например, на форме, то при сворачивании окна программы твой рисунок сотрётся. Собственно за рисование отвечает свойство canvas. Если у компонента есть такое свойство, то на нём можно рисовать, если нет - увы. Кстати, это свойство ты не найдёшь в инспекторе объектов. Это свойство не доступно во время разработки программы.

  Способы сохранения и загрузки параметров программного обеспечения (документация)
Источник: articlesКорнейчук Михаи В этой статье речь пойдет о способах сохранения и загрузки параметров программного обеспечения. Из своего личного опыта я могу твердо сказать, что это не так просто, как кажется многим. Как Вы уже успели заметить, крупные программные продукты используют для хранения своих параметров исключительно системный реестр. Напротив, разработчики программного обеспечения, относящие его к freeware, предпочитают конфигурационные файлы с расширением "ini" (далее "ini-файлы"). Почему же дело обстоит именно так? Мы рассмотрим два этих способа более подробно, а так же поговорим о внедрении определенных средств защиты ini-файлов. Системный реестр - один из самых надежных, но отнюдь не самый безопасный способов хранения параметров. Данные в нем располагаются в виде иерархической структуры, что облегчает поиск нужного раздела, но тем самым увеличивает риск удаления данных.

  Хитрости использования системного реестра в Дельфи (документация)
Источник: articles Добавление элементов в контекстное меню "Создать" 1. Создать новый документ, поместить его в папку windows/shellnew 2. В редакторе реестра найти расширение этого файла, добавить новый подключ, добавить туда строку: filename в качестве значения которой указать имя созданного файла. Путь к файлу который открывает не зарегистрированные файлы 1. Найти ключ hkey_classes_root\unknown\shell 2. Добавить новый ключ open 3. Под этим ключом еще ключ с именем command в котором изменить значение (По умолчанию) на имя запускаемого файла, к имени нужно добавить %1.

  Увеличение возможностей функции MessageDlg (документация)
Источник: articlesMichael Bruus. Перевод Руденко Е.В. Необходимость в двух неочевидных (не по умолчанию) возможностях функции messagedlgзаставили меня исследовать исходный код модуля dialogs.Во-первых, мне нужна была форма диалога, которая закрывалась бы при нажатии клавиши ивозвращала при этом код нажатой клавиши .Что-то наподобие команды turbopascal if keypressed then thekey:=readkey.Во-вторых, мне нужно было контролировать,какая кнопка диалога активна по умолчанию.Если , например, у вас появилась форма messagedlg с вопросом : " Вы действительно хотите удалить файл?"и по умолчанию фокус находится на кнопке yes (что верно в стандартном окне messagedlg) ,то для нетерпеливого пользователя могут возникнуть проблемы.В модуле dialogs имеется функция, называемая createmessagedialog ,которая используется в messagedlg для собственно формирования диалога.Используя функцию createmessagedialog прямо вы получаете наилучшую форму messagedlg и плюс больший контроль за поведением данной формы.Ниже показано решение этих моих двух проблем.Создайте новое приложение. Разместите две кнопки ( buttons) и Метку ( label) на форме.Назовите событие onclick кнопки button1tform1.button1click и событие onclick кнопки button2 tform1.button2click.Щелкните кнопкой button1 , чтобы появилась диалоговая форма,которая закроется , когда пользователь нажмет одну из видимых диалоговых кнопок или нажметesc или щелкнет на иконке закрытия формы диалога. Нажатая кнопка будет показана в метке label1.Щелкните кнопкой button2 , будет показана стандартная диалоговая форма,но с одним отличием : по умолчанию выбрана кнопка no, а не кнопка yes.Для выбора кнопки no я использую код : if tbutton(controls[n]).name='no'.Вместо 'no' можно использовать 'yestoall', 'abort' или любые другие заголовки кнопки ,используемой по умолчанию.unit unit1;interfaceuseswindows, messages, sysutils, classes, graphics, controls,forms, dialogs,stdctrls;typetform1 = class(tform)button1: tbutton;label1: tlabel;button2: tbutton;procedure button1click(sender: tobject);procedure helpboxkeypress(sender: tobject; var key:char);procedure button2click(sender: tobject);private{ private declarations }public{ public declarations }end;varform1: tform1;implementation{$r *.dfm}varlegalkeys: string;procedure tform1.button1click(sender: tobject);vars:string;beginlegalkeys:='abc123';s:='what do you want to do now?'#13#13'a. go home'#13'b.eat lunch'#13+'c. sleep'#13'1.

  Синхронизация процессов при работе с Windows (документация)
Источник: articlesАнатолий Тенцер waitable timer (таймер ожидания) Таймер ожидания отсутствует в windows 95, и для его использования необходимы windows 98 или windows nt 4.0 и выше. Таймер ожидания переходит в сигнальное состояние по завершении заданного интервала времени. Для его создания используется функция createwaitabletimer: function createwaitabletimer(lptimerattributes: psecurityattributes; // Адрес структуры// tsecurityattributesbmanualreset: bool; // Задает, будет ли таймер переходить в// сигнальное состояние по завершении функции// ожиданияlptimername: pchar // Имя объекта): thandle; stdcall; Когда параметр bmanualreset равен true, то таймер после срабатывания функции ожидания остается в сигнальном состоянии до явного вызова setwaitabletimer, если false-таймер автоматически переходит в несигнальное состояние. Если lptimername совпадает с именем уже существующего в системе таймера, то функция возвращает его идентификатор, позволяя использовать объект для синхронизации между процессами. Имя таймера не должно совпадать с именем уже существующих объектов типов event, semaphore, mutex, job или file-mapping. Идентификатор уже существующего таймера можно получить функцией: function openwaitabletimer(dwdesiredaccess: dword; // Задает права доступа к объектуbinherithandle: bool; // Задает, может ли объект наследоваться// дочерними процессамиlptimername: pchar // Имя объекта): thandle; stdcall; Параметр dwdesiredaccess может принимать следующие значения: timer_all_access Разрешает полный доступ к объекту timer_modify_state Разрешает изменять состояние таймера функциями setwaitabletimer и cancelwaitabletimer synchronize Только для windows nt - разрешает использовать таймер в функциях ожидания После получения идентификатора таймера поток может задать время его срабатывания функцией setwaitabletimer: function setwaitabletimer(htimer: thandle; // Идентификатор таймераconst lpduetime: tlargeinteger; // Время срабатыванияlperiod: longint; // Период повторения срабатыванияpfncompletionroutine: tfntimerapcroutine; // Процедура-обработчикlpargtocompletionroutine: pointer;// Параметр процедуры-обработчикаfresume: bool // Задает, будет ли операционная// система «пробуждаться»): bool; stdcall; Рассмотрим параметры подробнее. lpduetime Задает время срабатывания таймера.

  Увеличение возможностей функции MessageDlg (документация)
Источник: articlesMichael Bruus. Перевод Руденко Е.В. Необходимость в двух неочевидных (не по умолчанию) возможностях функции messagedlg заставили меня исследовать исходный код модуля dialogs.Во-первых, мне нужна была форма диалога, которая закрывалась бы при нажатии клавиши и возвращала при этом код нажатой клавиши .Что-то наподобие команды turbopascal if keypressed then thekey:=readkey.Во-вторых, мне нужно было контролировать, какая кнопка диалога активна по умолчанию.Если , например, у вас появилась форма messagedlg с вопросом : " Вы действительно хотите удалить файл?" и по умолчанию фокус находится на кнопке yes (что верно в стандартном окне messagedlg) , то для нетерпеливого пользователя могут возникнуть проблемы.В модуле dialogs имеется функция, называемая createmessagedialog , которая используется в messagedlg для собственно формирования диалога.Используя функцию createmessagedialog прямо вы получаете наилучшую форму messagedlg и плюс больший контроль за поведением данной формы.Ниже показано решение этих моих двух проблем.Создайте новое приложение. Разместите две кнопки ( buttons) и Метку ( label) на форме.Назовите событие onclick кнопки button1tform1.button1click и событие onclick кнопки button2 tform1.button2click.Щелкните кнопкой button1 , чтобы появилась диалоговая форма, которая закроется , когда пользователь нажмет одну из видимых диалоговых кнопок или нажмет esc или щелкнет на иконке закрытия формы диалога. Нажатая кнопка будет показана в метке label1.Щелкните кнопкой button2 , будет показана стандартная диалоговая форма, но с одним отличием : по умолчанию выбрана кнопка no, а не кнопка yes.Для выбора кнопки no я использую код : if tbutton(controls[n]).name='no'.Вместо 'no' можно использовать 'yestoall', 'abort' или любые другие заголовки кнопки , используемой по умолчанию.unit unit1;interfaceuseswindows, messages, sysutils, classes, graphics, controls,forms, dialogs,stdctrls;typetform1 = class(tform)button1: tbutton;label1: tlabel;button2: tbutton;procedure button1click(sender: tobject);procedure helpboxkeypress(sender: tobject; var key:char);procedure button2click(sender: tobject);private{ private declarations }public{ public declarations }end;varform1: tform1;implementation{$r *.dfm}varlegalkeys: string;procedure tform1.button1click(sender: tobject);vars:string;beginlegalkeys:='abc123';s:='what do you want to do now?'#13#13'a. go home'#13'b.eat lunch'#13+'c. sleep'#13'1.

  Программист более не звучит гордо
Источник: gazetaАндрей Анненков «Программист» более не звучит гордо. Прошли те времена, когда программист чувствовал себя рэкетиром, перед которым трепетало беспомощное начальство. Специалисты по найму персонала, почуяв программиста, не склонны делать стойку, а «хороший программист» в устах шефа - это ровно то же, что и «хороший водитель». Означает: «У меня нет из-за него проблем». Да что там, теперь в объявлениях о знакомстве девушки просят программистов не беспокоиться - вот интегральная оценка ситуации, в которой оказались рядовые труженики клавиатуры. Я вам скажу, когда это началось. Середина восьмидесятых.

  Уменье заработать на ошибках
Источник: Силиконовая Тайга Когда в апреле прошлого года Джеффри Кларк пришел на должность исполнительного и финансового директора в именитую программную фирму Computer Associates International (CA), он первым делом вынужден был полностью погрузиться в проверку и перепроверку бухгалтерских документов: существовавший в компании режим финансовой отчетности позволял ее сотрудникам допускать такие искажения, которые в общей сложности за год достигали суммы в 1 млрд. долларов. По признанию Кларка, в фискальном устройстве СА трудно было найти хоть одну деталь - счет, фактуру или баланс, - не содержавшую ошибок, нарушений или фальсификаций. Для анализа и реконструкции всего этого дезорганизованного хозяйства Кларку пришлось нанять целую группу опытных инспекторов и ревизоров, создать компетентную внутреннюю аудиторскую комиссию, а главное - использовать в упорядочении бухучета корпорации… программные средства с торговой маркой Computer Associates. Как это ни парадоксально, но до того времени в практике фирмы, известной своими специализированными системами хранения данных и управления корпоративными активами, не было принято пользоваться этими разработками для собственных нужд. Но теперь, когда действие закона Сарбейнса-Оксли и ряда других директивных актов поставило официальную отчетность во главу угла деятельности и самого существования любого коммерческого предприятия, представителям малого, среднего и, тем более, крупного бизнеса не остается ничего другого, кроме как изыскивать наиболее эффективные средства и методы приведения финансовой документации в соответствие с нормами государственного регулирования. И в этих условиях компанию СА можно рассматривать в качестве яркого примера американской иллюстрации к русской пословице "Назвался груздем - полезай в кузов": "Будучи известными производителями программного обеспечения, мы просто обязаны использовать возможности компьютерной автоматизации прежде всего для налаживания своего экономического механизма, проводя, таким образом, тестирование и отладку создаваемых нами продуктов на самих себе", - утверждает Джеффри Кларк.

  Сравнительный анализ Seagate Crystal Reports и Seagate Analysis
Вы не уверены, что понимаете разницу между Seagate Analysis и Seagate Crystal Reports? Давайте разберемся. Seagate Analysis предлагает все основные функциональности бизнес-логики: создание запросов, многомерный (OLAP) анализ данных и генерацию отчетов, с возможностью экспорта в Microsoft Excel. Seagate Crystal Reports позволяет создавать профессиональные, презентационного качества отчеты. Обладает преимуществами гибкого анализа данных и развитыми возможностями форматирования: масштабирование, определяемая пользователем графика, кросс-таблицы и подотчеты. Seagate Crystal Reports - это как создание отдельных отчетов, так и интеграция отчетов любой сложности с вашими приложениями. Seagate Analysis и Seagate Crystal Reports обладают предельной степенью унификации, поэтому Вы можете открывать свои отчеты в любом из этих продуктов. Матрица сравнения основных возможностей SA и SCR    Seagate Analysis Seagate Crystal Reports Форматирование отчетов      Изменение размеров полей X X Добавление графиков X X Секционное форматирование X X Форматирование объектов X X Вставка объектов X X Перемещение объектов (в пределах секции) X X Перемещение объектов (в новые секции)   X Мультидетальные секции   X Создание "наклеек"   X Создание писем   X Рисование границ и линий, вставка графики   X Различные стили отчетов   X Подотчеты   X Инструменты для анализа      OLAP-дизайнер X   Редактор формул X * X Изменяемая графика X * X Эксперты отчетов   X Географические карты   X Условное форматирование   X Кросс-таблицы   X Top N (специальная сортировка)   X Экспорт отчетов      Экспорт в Word, Excel, .rtf X X Экспорт в ODBC   X Экспорт в HTML   X Экспорт в дополнительные 25 форматов   X Распространение отчетов через e-mail   X API      Delphi, Visual C++, Visual Basic, Visual J++ и др.

  IT-специалист стоит столько, сколько он знает
Источник: blogsdocument.write('.');embarcaderoVsevolod Leonov IT-специалист стоит столько, сколько он знает Хороших новостей мало не бывает. Но здесь сразу после праздников начался некоторый "перебор". Тогда ранжируем по максимально широкому охвату масс IT-трудящихся. Есть и другие критерии, но выбор за вами. Я бы порекомендовал максимально расширять свои горизонты. Конечно, это нужно делать тщательно. Не чтивом всего подряд и хождением на всевозможные конференции.

  Синхронизация процессов при работе с Windows. Waitable timer (таймер ожидания) (исходники)
Источник: КомпьютерПрессАнатолий Тенцер Таймер ожидания отсутствует в Windows 95, и для его использования необходимы Windows 98 или Windows NT 4.0 и выше. Таймер ожидания переходит в сигнальное состояние по завершении заданного интервала времени. Для его создания используется функция CreateWaitableTimer: function CreateWaitableTimer(   lpTimerAttributes: PSecurityAttributes;     // Адрес структуры                                               // TSecurityAttributes   bManualReset: BOOL;  // Задает, будет ли таймер переходить в                        // сигнальное состояние по завершении функции                        // ожидания   lpTimerName: PChar   // Имя объекта ): THandle; stdcall; Когда параметр bManualReset равен TRUE, то таймер после срабатывания функции ожидания остается в сигнальном состоянии до явного вызова SetWaitableTimer, если FALSE-таймер автоматически переходит в несигнальное состояние. Если lpTimerName совпадает с именем уже существующего в системе таймера, то  функция возвращает его идентификатор, позволяя использовать объект для синхронизации между процессами. Имя таймера не должно совпадать с именем уже существующих объектов типов event, semaphore, mutex, job или file-mapping. Идентификатор уже существующего таймера можно получить функцией: function OpenWaitableTimer(   dwDesiredAccess: DWORD;  // Задает права доступа к объекту   bInheritHandle: BOOL;    // Задает, может ли объект наследоваться                            // дочерними процессами   lpTimerName: PChar       // Имя объекта ): THandle; stdcall; Параметр dwDesiredAccess может принимать следующие значения: TIMER_ALL_ACCESS Разрешает полный доступ к объекту TIMER_MODIFY_STATE Разрешает изменять состояние таймера функциями SetWaitableTimer и CancelWaitableTimer SYNCHRONIZE Только для Windows NT - разрешает использовать таймер в функциях ожидания После получения идентификатора таймера поток может задать время его срабатывания функцией SetWaitableTimer: function SetWaitableTimer(   hTimer: THandle;                  // Идентификатор таймера   const lpDueTime: TLargeInteger;   // Время срабатывания   lPeriod: Longint;                 // Период повторения срабатывания   pfnCompletionRoutine: TFNTimerAPCRoutine;  // Процедура-обработчик   lpArgToCompletionRoutine: Pointer;// Параметр процедуры-обработчика   fResume: BOOL                     // Задает, будет ли операционная                                     // система «пробуждаться» ): BOOL; stdcall; Рассмотрим параметры подробнее.lpDueTime Задает время срабатывания таймера. Время задается в формате TFileTime и базируется на coordinated universal time (UTC), то есть должно указываться по Гринвичу.

  Delphi и Bluetooth. Часть 1 (исходники)
Источник: mobileservicesoftПетриченко Михал Вступление Этой статьей начинаем серию статей по работе с Bluetooth в Delphi под Microsoft Windows XP. Так как тема весьма сложная, прошу внимательно читать. Повторяться не буду. Все программы написаны на Delphi 6 и тестировались со стандартным стеком Bluetooth от Microsoft под Windows XP + SP2. Все необходимые библиотеки прилагаются. Так что дополнительно ничего качать не нужно. При разработке использовал только API функции с JEDI.

  Borland CodeGear выпускает Delphi for PHP, предназначенный для быстрой разработки веб-приложений
Компания CodeGear, подразделение компании Borland,  объявила о выпуске продукта Delphi for PHP, который является интегрированной, построенной на компонентах, средой для быстрой разработки приложений (RAD IDE) и библиотеки визуальных компонентов с открытым исходным кодом для PHP (VCL for PHP). Продукт Delphi for PHP предоставляет веб-разработчикам, программирующим на языке PHP, все преимущества быстрой разработки приложений, которыми пользователи языка Delphi пользуются уже много лет. Сегодня язык PHP является наиболее известным языком программирования динамических веб-страниц и одним из 10 наиболее популярных языков программирования в целом. Продукт Delphi for PHP предназначен для перевода процесса PHP-разработки на следующий уровень, позволяя быстрее и с меньшими усилиями разрабатывать полноценные, управляемые базами данных, веб-приложения.  "Инструментальные средства разработчика от CodeGear являются самыми лучшими на рынке и Delphi for PHP не является исключением", - сказал Джонатан Бенедикто (Jonathan Benedicto), владелец компании JomiTech, которая занимается разработкой инструментальных средств и базируется в Онтарио, Канада. "Будучи опытным разработчиком приложений на языке PHP, я быстро перешел на Delphi for PHP, который стал моим любимым редактором. Библиотека VCL for PHP предоставляет знакомую среду проектирования языка Delphi плюс потрясающие возможности, ориентированные на быструю разработку приложений. Теперь я могу просто отделить графический интерфейс пользователя от кода, отвечающего за логику реальной веб-страницы, воспользовавшись такой возможностью, как использование шаблонов интегрированной страницы.

  Delphi и Bluetooth. Часть 2 (исходники)
Источник: mobileservicesoftПетриченко Михал В первой части статьи мы научились получать список локальных радиомодулей Bluetooth и узнавать их свойства. Теперь пришло время получить список устройств Bluetooth, которые подключены к нашим локальным радиомодулям. Получение списка устройств Bluetooth  Для получения списка устройств Bluetooth нам понадобятся следующие функции (они очень похожи на функции, используемые для получения списка локальных радиомодулей). BluetoothFindFirstDevice  Начинает перечисление устройств Bluetooth. Объявление функции:  function BluetoothFindFirstDevice(const pbtsp : BLUETOOTH_DEVICE_SEARCH_PARAMS;var pbtdi : BLUETOOTH_DEVICE_INFO): HBLUETOOTH_DEVICE_FIND; stdcall;  Параметры:  pbtsp - указатель на структуру BLUETOOTH_DEVICE_SEARCH_PARAMS. Член dwSize этой структуры должен содержать размер структуры (устанавливается посредством SizeOf(BLUETOOTH_DEVICE_SEARCH_PARAMS)). Член hRadio должен содержать описатель локального радиомодуля, полученный вызовом функции BluetoothFindFirstRadio. pbtdi - структура BLUETOOTH_DEVICE_INFO в которую будет возвращена информации об устройстве Bluetooth.  Возвращаемые значения: в случае успешного выполнения функция вернет корректный описатель в качестве результата.

  Фундаментально про объектно-ориентированное программирование
Источник: DelphiSourcesФедоренко Сергей Введение Язык программирования Object Pascal и его достойный преемник, среда программирования Delphi, построены на основе получившей широкое развитие на стыке 70 - 80-х годов 20 века теории объектно-ориентированного программирования. В то время идея описания программ в базисе логических сущностей и взаимодействия между ними не была такой уж бесспорной, а у некоторых оппонентов даже вызывала определённое недоумение. Преимущества ООП по сравнению с традиционными способами программирования: Эта концепция в наибольшей степени соответствует внутренней логике функционирования операционной системы Windows. Программа, состоящая из отдельных объектов, отлично приспособлена к реагированию на события, происходящие в операционной системе. Большая надёжность кода и возможность повторного использования отработанных объектов. Объект и класс Еже само название концепции "объектно-ориентированное программирование" указывает на то, что ключевой фигурой в ООП является объект. Объекты - это крупнейшее достижение в современной технологии программирования.

  Перенос VBA-макросов в Delphi (исходники)
Источник: Королевство DelphiАлександр Шабля Запись макроса (меню Excel "Сервис\Макрос\Начать запись…") незаменимая вещь при написании отчетов или создания диаграмм в Excel'е, особенно для тех, кто только начинает с ним работать. Но, записанный в Excel макрос, иногда выглядит довольно громоздко и читается с трудом. В данной статье я хочу рассмотреть методы перевода записанных макросов в более удобный вид для использования их в Delphi. Также будет рассмотрены некоторые нестыковки в объектной модели Excel'я в записанных макросах и методы их исправления. Для начала рассмотрим записанные в Excel'е макросы и попробуем сократить их VBA-код для переноса в Delphi. Откроем в Excel'e новую книгу и выполним, к примеру, простые действия - запустим запись макроса, выделим область "A1:D5" и в тулбаре "Границы" выберем "Все границы". Остановим запись макроса и посмотрим, что у нас получилось.

  Какой из генераторов отчетов самый быстрый?
Источник: Delphi PlusСергей Медведев Почему самый быстрый? Думаю, у каждого, кто столкнулся с выбором инструмента для генерации отчётов, возникал вопрос - как именно выбирать, что сравнивать? По размеру? А по какому именно размеру? К примеру, по размеру, который добавится к вашему приложению? Но есть генераторы отчётов, которые к приложению вроде как ничего и не добавляют, а идут в отдельном dll-файле, который по своим размерам раз в несколько больше файла самого приложения. Или, к примеру, к самому исполняемому файлу добавляется совсем немного, зато файлы отчётов буквально "перевешивают" приложение... Или по размеру файла отчёта? Наверное, это будет более весомый фактор, но не решающий. По удобству для пользователя? А в чём его измерить? По скорости генерации отчётов? Или же, при нынешних скоростях процессоров, скорость не должна играть решающего значения? Как оказывается, играет. Ведь далеко не каждое приложение генерирует только один простенький отчёт в конце рабочего дня. Если приложение должно быть распределенным, многопользовательским, то, вероятно, скорость генерации и компактность отчётов будут решающими. Обычно разработчик выбирает себе такой инструмент как супругу - один раз и надолго.

  Delphi и Bluetooth. Часть 3 (исходники)
Источник: mobileservicesoftПетриченко Михаил Часть 1 :: Часть 2 Вступление Итак, в предыдущих частях мы научились получать список локальных радиомодулей Bluetooth и удаленных устройств Bluetooth. Нам осталось научиться получать список сервисов, предоставляемых удаленным устройством и управлять локальными радиомодулями. Так же, необходимо разобраться, как же все-таки передаются данные между различными устройствами Bluetooth. В этой части, а она будет самой длинной и информативной, мы создадим программу, которая поможет нам обобщить полученную информацию и покажет, как использовать новые функции, которые здесь будут описаны. Прежде, чем мы приступим, давайте определимся в терминах. Microsoft в своей документации вводит два термина: Radio и Device. Radio - это локальный радиомодуль Bluetooth (USB-брелок, интегрированное решение, в общем то, что установлено на вашем компьютере).

  Дороги ведут к "Хранилищу". Обсуждение "больных тем" информационных проектов
Источник: "ITeam - технологии корпоративного управления"Дмитрий Корнилин - Я обещаю научить за 10 лет ишака всему Корану- Ходжа, что ты говоришь?Ведь, шах тебя обезглавит, если ты неисполнишь свое обещание!- Да, за 10 лет кто-нибудь помрет - либо шах,либо ишак, либо я… Вольное толкование старой притчи для внедренцев ERP Наверное, каждый, кто хоть раз сталкивался с «большими» информационными проектами, может подтвердить актуальность знаменитой шутки Ходжи Насреддина. Кажется, все проблемы автоматизации давно решены. На рынке полно «серьезных» и «успешно себя зарекомендовавших» систем, поставщики которых (но чаще, все-таки, продавцы) обещают «автоматизировать все, что угодно». Консультанты и аудиторы в один голос подтверждают надежность и эффективность вложений сотен тысяч долларов в информационные системы. Любой руководитель, слышал хотя бы об одной системе из трех букв: ERP, MRP, CRM. В чем же тогда проблема? Почему большая часть таких «серьезных проектов» кончается откровенной неудачей? Почему такие известные системы, как SAP, Oracle Financial, People Soft, не работают эффективно, по крайней мере, в нашей стране? Буквально месяц назад один очень серьезный начальник одной из самых известных в нашей стране компаний признался на переговорах - что в России нет нормально внедренных и эффективно функционирующих проектов SAP R3. Может, конечно, мой собеседник и «перегнул палку», но отрицать проблему уже невозможно - среди несколько десятков хорошо известных проектов SAP до «рапорта о внедрении» дошли единицы.

  Delphi и Bluetooth. Часть 4 (исходники)
Источник: mobileservicesoftПетриченко Михаил Часть 1 :: Часть 2 :: Часть 3  Вступление Наконец я добрался и до заключительной, как я надеюсь, части статьи про Bluetooth. Здесь я постараюсь изложить в доступной форме, как же все-таки передавать данные через Bluetooth. Я не буду приводить здесь каких-либо готовых примеров приложений. Дам только теорию. К практике, я думаю, вы перейдете сами. Как вы помните из предыдущих моих статей, мы используем исключительно Windows API для работы с Bluetooth. Сразу хочу оговориться, что описанные здесь способы не будут работать с драйверами BlueSoliel и VIDCOMM.



[ 1 ] 2 3

Главная »  Delphi 

© 2017 Team.Furia.Ru.
Частичное копирование материалов разрешено.