Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Сентябрь 2008 → | ||||||
1
|
2
|
3
|
4
|
5
|
6
|
7
|
---|---|---|---|---|---|---|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
|
29
|
30
|
Статистика
-1 за неделю
Программирование на Delphi (выпуск 85)
Программирование на DELPHI
Выпуск #85 (28 сентября 2008 г.)
Если Вы хотите где-либо разместить материалы, представленные на www.delphi.int.ru или в данной рассылке, свяжитесь, пожалуйста, с их автором или ведущим рассылки.
Delphi.int.ru Expert Последние новости
Архив: вопросы и ответы В архив попадают вопросы, срок действия которых истёк. Каждый заданный вопрос действителен в течение одной недели, т.е. ответы на него принимаются именно в этот период. В сегодняшнем выпуске опубликованы вопросы # 436 - 460. Вопросы, на которые не было дано ни одного ответа, не публикуются. Статистика по выпуску: Кол-во вопросов: 24 Вопрос # 436 Добрый день,уважаемые эксперты! Подскажите, пожалуйста, чайнику где можно откопать пример (исходничек) или подробное описание механизма переноса остатков,например, товара на начало месяца. Т.е. проблема с входящим сальдо. Есть приход, расход за разный период, исходящие данные определить.Входящие данные за нужный период, причем по определенной позиции наити проблема. Заранее спасибо!
Ответ #1. Отвечает эксперт: Вадим К Это вопросы к бухгалтерам, а не программистам.
Вопрос # 437 Приветствую!!У меня такой вопрос.При работе с б.д. что лучше использовать свойства компонентов или SQL?
Ответ #1. Отвечает эксперт: Николай Рубан Конечно SQL - потому что он ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц. Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки. SQL сам определяет, где находятся данные, какие индексы и даже наиболее эффективные последовательности операций следует использовать для их получения: не надо указывать эти детали в запросе к базе данных.
Ответ #2. Отвечает эксперт: Вадим К Советую учить и учить SQL, но и компоненты тоже, так как они облегчают заметно жизнь.
Вопрос # 440 В программе использую много MDI-форм внешне схожих, поэтому наследую их от одной формы. При закрытии в родителе ставлю
Ответ #1. Отвечает эксперт: Вадим К Задача осложняется тем, что на одну форму может быть не одна переменная-указатель. Что и есть в вашем случае. Self и FormXXX. И форма не сможет обнулить их всех. это даже в теории сложно звучит.
Вопрос # 441 Уважаемые эксперты!
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, Sunshine!
Ответ #2. Отвечает эксперт: Сергей Устинов Здравствуйте, Sunshine!
Ответ #3. Отвечает эксперт: Вадим К Когда то я пользовался прогрммкой PubSource. Она с минимальными затратами позволяла всё делать. Но когда я поставил gExpert (www.gexperts.org) я забыл о ней - теперь в меню есть всё, что надо
Ответ #4. Отвечает эксперт: Косолапов Дмитрий Юрьевич Здравствуйте, Sunshine!
Ответ #5. Отвечает эксперт: min@y™ Моя старая прога SourceViewer, развитие которой давно остановлено, умеет экспортировать текст с подсветкой в Word (формат RTF) или в буфер обмена.
Вопрос # 442 Приветствую!!У компонента ListBox можно задать несколько колонок. А как к ним обращаться?
Ответ #1. Отвечает эксперт: Dron Здравствуйте, KilkaMS!
Ответ #2. Отвечает эксперт: Вадим К Соглашаюсь с предыдущим экспертом. Так оно и есть.
Ответ #3. Отвечает эксперт: Косолапов Дмитрий Юрьевич Воспользуйтесь компонентом TListView.
Вопрос # 443 Здравствуйте, будет ли хорошо работать Delphi7 с Microsoft SQL 2005, или все же лучше будет работать с 2000 ником, и как там делать отчеты на печать.
Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич Скорее всего, при использовании компонентов с закладки ADO никаких проблем не возникнет.
Вопрос # 444 Здравствуйте, господа Эксперты! помогите разобраться, пожалуйста, со следующей ситуацией: использую Delphi6+FireBird1.5
Ответ #1. Отвечает эксперт: Бубырь Александр Николаевич Добрый день.
Ответ #2. Отвечает эксперт: Вадим К Скорее всего вы пытаетесь сделать "живой запрос". а с одним IBDataSet это невозможно. "Живой запрос" - это запрос, который можно редактировать, к примеру в DBGrid'e
Вопрос # 445 Здравствуйте. Хочу задать вопрос, почему у меня не получается компилировать ресурс при помощи brcc32.exe. Может он не работает
Ответ #1. Отвечает эксперт: Николай Рубан В приложении две процедуры, который создают INI. Одна вносит данные в файл, другая читает (также необходимо прописать uses Inifiles;). Приложение:
Ответ #2. Отвечает эксперт: Вадим К Не компилировать ресурс может по многим причинам. Самая простая - у вас ошибка в файле rc.
Вопрос # 446 Доброе время суток уважаемые эксперты, вопрос собственно в чем, есть у меня работающее приложение , которое каджый день получает с видеокамеры наблюдения видео и сохраняет его на компьютер, каждый час создается на диске папочка с именеи типа "02-04-07 02" где первые две цифры это (День, затем Месяц, год и тот час во время которого происходила запись) (те дд-мм-гг чч)
Ответ #1. Отвечает эксперт: min@y™ В старой версии пакета модулей Delphi Works в файле FileWorks.pas есть все необходимые тебе функции? а именно:
Ответ #2. Отвечает эксперт: Бубырь Александр Николаевич Проще будет при помощи FindFirst/FindNext найти нужные папки, при помощи них же сделать свою версию DeleteDirectory - это строчек 15, повесить все это на таймер и выполнять раз в полчаса-час.
Ответ #3. Отвечает эксперт: Вадим К Я бы переводил дату напрямую с названия каталога. Так как нет гарантии, что дата создания каталога будет та, что надо (её случайно не обновлят. Хоть как это и странно выглядит, но это возможно. Каталоги банально могли на новый винт закопипастить).
Вопрос # 447 Кака прелбразовать файл в формате XML в формат Excel но при этом на машине не будет установлен MS Office?
Ответ #1. Отвечает эксперт: Вадим К Есть два пути. Так как вы не сказали, какой именно формат вам надо
Ответ #2. Отвечает эксперт: Бубырь Александр Николаевич Есть еще вариант. Можно открыть в OpenOffice Calc и сохранить в XLS. OpenOffice бесплатный и им можно управлять из Делфи.
Вопрос # 448 Добрый день! Хочу сделать оболочку для assembler'а. Для этого нужен текстовый редактор с подсветкаой синтаксиса, и втроенные функции вызова ассемблера для компиляции и просмотра результата. Все писать некогда да и лениво. Просьба, если не затруднит поделитесь своими соображениями и может ссылками на подобные редакторы. Еще один момент: как заставить пограмму запускать асемблер и готовый проект в одном консольном окне (по очереди), не вызывая новое? Заранее благодарен!
Ответ #1. Отвечает эксперт: Вадим К >>Все писать некогда да и лениво.
Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, Scayn!
Ответ #3. Отвечает эксперт: min@y™ [quote]
Вопрос # 449 Доброе время суток! Помогите разобраться, пожалуйста. На форму помещен TDBLookupComboBox. В некоторых случаях список для выбора раскрывается как положено (показывается определнное для показа количество строк), а в некоторых весь список выбора помеещается в одной строке, расположенной под самим компонентом. Речь идет об одном и том же компоненте - никакие свойства вручную не меняются. Что за фокус? Причем свойства меняются во время выполнения программы сами по себе. Кол-во строк для выбора в таблице -источнике больше одной.
Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович Здравствуйте, Мережников Андрей!
Вопрос # 450 Приветствую! Где мне можно найти статейки обучающие работе в сети. Имеется ввиду создание приложений работающих по принципу "Клиент-сервер", адресации протоколов, и главное как это все обеспечить в Delphi. А есче лучше с прямым уклоном на создание БД.
Ответ #1. Отвечает эксперт: min@y™ Ну, если уж замуж невтерпёж, то сюда:
Вопрос # 452 Доброго времени суток.
Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич Скорее всего, надо делать запрос с группировкой... Только необходимо переименовать поле с ценой, иначе будет конфликт имени поля с агрегирующей функцией (в приложении - Cost). Приложение:
Ответ #2. Отвечает эксперт: Вадим К вначале делаем сиквел запрос вида
Вопрос # 454 Люди помогите пожалуста розобратса что собой в паскале представляет спрайт, и как им пользоватса!
Ответ #1. Отвечает эксперт: Вадим К В паскале нет спрайтов. Скорее всего это понятие с кокой-то чужой библиотеки.
Вопрос # 455 Доброго времени суток, уважаемые! Подскажите пожалуйста, есть ли какой то редактор кода для Делфи, где можна сворачивать процедуры и разные вложения и т.д.? Я вроде когда то слышал что то такое, но не видел. ТОлько меня интересует не отдельный редактор, а что бы он встраивлся в IDE Delphi. Заранее. большое спасибо!
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович Таких редакторов сделано довольно много, правда большинство из них коммерческие. Большое растространение получил бесплатный SynEdit. Это целый набор компонент. В стандартном пакете реализованы подсветка для большинства языков (можно реализовать и свою), подсказки, выплывающие списки, печать, предпросмотр и даже экспорт с сохранением форматирования.
Ответ #2. Отвечает эксперт: min@y™ Фолдинг реализован в IDE Delphi начиная с версии 8.0.
Ответ #3. Отвечает эксперт: Новаковский Юрий Аврамович Здравствуйте, sv_sergik!
Вопрос # 456 Спрашивает начинающий программист. Как добавить новые данные из Edit в БД?
Ответ #1. Отвечает эксперт: Дима Гусаков Здравствуйте, Usmonov Farrukh Faiziddinovich! Приложение:
Вопрос # 458 Здравствуйте. У меня к вам такой вопрос?
Ответ #1. Отвечает эксперт: Вадим К Можно, нужно для первой формы обрабатывать сообщение WM_MOVE. Это сообщение посылается форме, когда она пересовывается. Новые координаты второй формы всегда можно расчитать, зная координаты первой формы.
Ответ #2. Отвечает эксперт: Дима Гусаков Здравствуйте, Толков Геннадий Викторович! Приложение:
Вопрос # 459 Всем Привет! Приложение:
Ответ #1. Отвечает эксперт: Роман Здравствуйте, Vit2!Тупо открываем delphiworld.narod.ru/base/disk_size_free.html и ctrl-c - имеем(см код).Результатом будет значение в байтах Приложение:
Ответ #2. Отвечает эксперт: min@y™ Скачай Delphi Works. Проблем знать не будешь.
Вопрос # 460 такой вопрос: как можно выводить wav-файл по частям в 10-50кб? пробовал mmsystem (функции waveOut***) - щелчки при смене буфера. пробовал через DirectX - нашел только 1 работающий пример((. не знаю как отлавливать окончание проиграывания буфера. пробовал создавать один буфер большого размера (20Мб) - получил тормоза. Кто что посоветует?
Ответ #1. Отвечает эксперт: Роман Здравствуйте, Сергей Мельников!Посмотрите пример на delphiworld.narod.ru/base/get_signal_from_microphone.html там о работе с буфером.Я думаю всё прояснится.
» Найти все предыдущие уроки можно на www.delphi.int.ru в разделе "Статьи". Последние 3 урока: Записи (часть 1)
ВведениеВ прошлом уроке мы познакомились со множествами - более сложной структурой данных нежели хранение значения одной переменной. Сегодня речь пойдёт о записях. Запись (англ. record) - это сложный тип данных, позволяющие объединить данные разных типов. Запись можно назвать наиболее общим сложным типом данных. Название "запись" появилось из тех соображений, что данные разного типа можно встретить в таблицах: в каждой строке записаны сразу несколько разных значений. Таким образом, одна запись соответствует одной строке данных: она имеет несколько полей, каждое из которых хранит своё значение. ПримерДопустим, мы хотим хранить информацию о людях, заполнивших анкету на поступление на работу. Нас интересуют: ФИО человека, возраст, образование (среднее/высшее), владение компьютером, владение иностранными языками. Все эти данные мы можем объединить в запись. Дальнейшее повествование будет основываться на этом примере. Описание записиЧтобы работать в программе с записями, нужно сначала описать соответствующий тип данных. Запись описывается следующим образом: type имя_типа_записи = record {поля записи} end; В блоке полей описание идёт точно так же, как описание переменных: указывается имя поля, далее через двоеточие тип данных этого поля. Сами поля разделяются точкой с запятой. Подходите ответственно к выбору типов данных для полей записи. Если при описании переменной она хранится в единственном экземпляре, то записи, как правило, используются для хранения некоторого набора данных (таблицы с несколькими строками, образно говоря). Это значит, что каждое из полей будет храниться в памяти столько раз, сколько строк данных у вас будет. Если в таблице 1000 строк, то объём занимаемой памяти будет немалым, да и скорость работы с данными может заметно уменьшиться из-за выбора избыточных типов данных. Для нашего примера: type TPerson = record Name: String; Age: Byte; Education,PC: Boolean; Foreign: set of TForeignLanguages; end; Разберём поля по порядку. Для ФИО вполне подходит текстовая строка типа String. 255 символов нам хватит сполна. Для хранения возраста целесообразно выбрать тип данных Byte (число от 0 до 255). Не думаю, что на работу будут устраиваться люди, возраст которых превышает 255 :-) Использовать тип Integer в данном случае нецелесообразно - мало того, что у него максимальное значение превышает 32.000, да ещё и отрицательные числа поддерживаются. Для поля "образование" выбран логический тип данных. Условимся, что True - это высшее образование, False - высшего нет (т.е. среднее). PC - владение компьютером, здесь всё понятно. Для хранения иностранных языков здесь используется множество. Ведь человек может знать несколько языков, не так ли? Описание типа данных, на основе которого построено множество, следующее: type TForeignLanguages = (flEnglish, flGerman, flFrench); Как видно, это перечислимый тип данных с тремя возможными значениями. Если вам мало английского, немецкого и французского, можете добавить в список и другие. Так как свойство Foreign нашей записи - множество, то мы сможем легко хранить информацию, например, о том, что человек знает и английский, и немецкий. Удобно, не правда ли? Если человек не знает никаких иностранных языков, множество будет пустое. Конечно, можно было бы добавить в список что-то вроде flNone для указания отсутствия иностранных языков, но зачем усложнять себе жизнь? Итак, наша запись готова. Чтобы работать с ней в программе, разместить её следует в глобальном разделе type. Примеры других записейСуществует множество готовых записей в Delphi, которые позволяют хранить некоторые часто встречающиеся данные. TPoint - запись с двумя полями - X и Y - служит для хранения координат точки. Описана эта запись следующим образом: TPoint = record X: Longint; Y: Longint; end; TRect - позволяет хранить данные о прямоугольной области. Свойства Left, Top, Right и Bottom отвечают за координаты сторон прямоугольника, а координаты TopLeft и BottomRight типа TPoint - указывают на левую верхнюю и правую нижнюю вершины соответственно (эти вершины позволяют однозначно определить прямоугольник на плоскости, стороны которого параллельны осям координат). Однако в один момент времени используется только один набор из этих свойств - либо 4 координаты, либо 2 точки. О том, как это делается, мы поговорим позже. Ещё один пример - хранение даты. Дату можно разбить на число, месяц и год, и хранить каждое значение отдельно: TDate = record Day: 1..31; Month: 1..12; Year: 1900..2100; end; Работа с записямиЧтобы обратиться к конкретному полю записи, применяется стандартная конструкция, с которой вы давно знакомы: имя_переменной.название_поля Т.е. имя переменной или объекта и его поле разделяются точкой. Чтобы работать с записью, нужно определить переменную, тип которой - наша запись. До этого мы всего лишь описали нашу запись, но на самом деле никаких значений ещё нигде нет. Описание происходит стандартным образом: var Person: TPerson;
Имя переменной вы, естественно, можете дать любое, просто логично называть всё своими именами. Вводим анкеты - интерфейсДля начала давайте создадим небольшой интерфейс, который позволит нам вводить информацию из анкет:
Компонент TCheckListBox расположен на странице Additional. Это список, аналогичный TListBox, но в каждой строке есть TCheckBox, т.е. строка либо отмечена, либо нет. В свойство Items сразу занесите наши 3 языка, вводя каждый на отдельной строке. Осталось добавить кнопку, которая будет выполнять все действия. Общий вид формы у меня получился таким: Теперь перейдём к программной части. Вводим анкеты - программированиеИтак, перейдём к программированию нашей кнопки "Добавить". Чтобы использовать нашу запись, создадим переменную соответствующего типа: var Person: TPerson;
Теперь у нас есть один экземпляр нашей записи и в него можно смело записывать данные. Никаких трудностей возникнуть не должно: procedure TForm1.Button1Click(Sender: TObject); var Person: TPerson; begin Person.Name:=Edit1.Text; Person.Age:=UpDown1.Position; Person.Education:=CheckBox1.Checked; Person.PC:=CheckBox2.Checked; Person.Foreign:=[]; if CheckListBox1.Checked[0] then Person.Foreign:=Person.Foreign + [flEnglish]; if CheckListBox1.Checked[1] then Person.Foreign:=Person.Foreign + [flGerman]; if CheckListBox1.Checked[2] then Person.Foreign:=Person.Foreign + [flFrench]; end; Ну и конечно комментарии. ОптимизацияВроде у нас всё хорошо, да вот об оптимизации не стоит забывать. В данном случае получится скорее не оптимизация, а сокращение кода. Помните про оператор with? Да-да, тот самый, что позволяет вынести имя объекта за скобку? Вот его и применим, вынеся Person вперёд: procedure TForm1.Button1Click(Sender: TObject); var Person: TPerson; begin with Person do begin Name:=Edit1.Text; Age:=UpDown1.Position; Education:=CheckBox1.Checked; PC:=CheckBox2.Checked; Foreign:=[]; if CheckListBox1.Checked[0] then Foreign:=Foreign + [flEnglish]; if CheckListBox1.Checked[1] then Foreign:=Foreign + [flGerman]; if CheckListBox1.Checked[2] then Foreign:=Foreign + [flFrench]; end; end; Уже лучше, согласитесь? Но всё равно не идеально. В частности, строки проверки иностранных языков выглядят как-то нелепо - они мало отличаются друг от друга. К тому же, что делать, если в списке будет 100 языков? 100 раз писать одно и то же? Нет, конечно. Единственная загвоздка в данном случае может возникнуть только в том, как преобразовать номер строки (0, 1, 2) в значение типа данных (flEnglish, flGerman, flFrench)? Эти значения ведь нельзя указать в виде строки... А решение простое. Если вспомним, что перечислимые типы данных упорядочены, а каждому "текстовому" значению просто ставится в соответствие число, начиная с нуля, проблема мигом решится. Итак, нам нужно просто привести типы данных, а именно - число к типу TForeignLanguages. Дальше элементарно - заводим цикл по строкам и "на лету" формируем требуемое множество. Итак, окончательный вариант: procedure TForm1.Button1Click(Sender: TObject); var Person: TPerson; I: Byte; begin with Person do begin Name:=Edit1.Text; Age:=UpDown1.Position; Education:=CheckBox1.Checked; PC:=CheckBox2.Checked; Foreign:=[]; for I := 0 to CheckListBox1.Items.Count-1 do if CheckListBox1.Checked[I] then Foreign:=Foreign + [TForeignLanguages(I)]; end; end; Красивый и при этом самый короткий код. ЗаключениеДанные мы получили и занесли их в память. А что с ними делать дальше? Наверное, сохранить их где-то для постоянного хранения. Например, в файле. О том, как это сделать - в следующий раз. Оцените данный урок (1 - плохо, ..., 5 - отлично):
-1- -2- -3- -4- -5-. Комментарии в тексте письма приветствуются.
Самые популярные статьи на сайте: ∙ Как можно из Delphi отслеживать все события Windows? Pascal и DelphiИсточник: HelloWorld.ru PascalТрудно рассказать что-то новое о том, что хорошо известно всем. Действительно, вряд ли найдется в нашей стране программист или просто выпускник средней школы, который не знал бы (или не слышал) об этом языке программирования. Основные концепции языка были разработаны в 1967-1968 г. профессором Николаусом Виртом (Niklaus Wirth) (Биографию Вирта можно прочитать на http://cc.kzoo.edu/~k98ja01/wirth.html) и опубликованы в 1971 году (The Programming Language Pascal Acta Informatica, 1 (Jun 1971), 35-63). Стандарт языка был разработан им в 1974 г. (PASCAL — User Manual and Report, ISO Pascal Standard Kathleen Jensen and Niklaus Wirth) совместно с Кетлин Йенсен (Kathleen Jensen). Паскаль достаточно быстро превратился из средства, предназначенного для обучения студентов программированию, в инструмент, который стали использовать для создания больших программных проектов. Заметим, что ни один из последующих языков, разработанных автором (а Вирт явл яется создателем Модулы и Оберона), не получил такого распространения. Трудно сказать, с чем это связано. Возможно, с тем, что язык удачно сочетает простоту с выразительностью и силой. Возможно, что просто он оказался в нужный момент на нужном месте, поскольку на момент создания языка, получившего свое имя в честь великого французского математика, в распоряжении программистов было весьма и весьма немного языков высокого уровня. И что самое главное, все они были разработаны для решения конкретных прикладных задач и во многом являлись продуктом «творческого акта», а не результатом серьезного научного труда. Фортран, названный одним из пионеров программирования Дейкстрой (Edsger Dijkstra) инфантильным дезорганизатором, предназначался только для математических расчетов и не выдерживал никакой критики с точки зрения ограничения доступа к данным и отсутствия поддержки структурного программирования. Об интерпретаторе Бейсик (тогда еще без приставки Visual) нельзя было говорить без слез. Кобол был ориентирован на реш ение экономических задач, a PL/I — чрезмерно сложен и принадлежал скорее к области проблем, чем к области решений. И вот тут появляется язык, на порядок отличающийся от них своим качеством. Основное, что привлекало к нему, — логичность, поддержка концепций структурного и процедурного программирования, работа с динамической памятью, возможность создания своих типов данных. Все это стало теперь настолько привычным, что трудно представить, как можно программировать без использования этих жизненно необходимых возможностей. Строгая типизация позволила сразу же на порядок снизить количество ошибок, появляющихся вследствие невнимательности или банальных опечаток. Кстати, для желающих использовать в своих программах прямой доступ к данным без всяких ограничений язык предоставил возможность создания записей с вариантами, которые можно трактовать в соответствии со своими потребностями. Но при этом программист должен всегда явно указывать, с каким типом данных в конкретной переменной он желает работать. Единственным недостатком языка, существовавшим в то время, было отсутствие поддержки модульности. Программист должен был компилировать весь проект целиком, со всеми входящими в него процедурами и функциями (правда, возможность поддержки вызовов подпрограмм из заранее скомпилированных и скомпонованных библиотек присутствовала с самого начала). Но, впрочем, это не удивительно — напомню, что язык-то был предназначен для обучения. Еще одной причиной, которая позволила языку перейти в категорию бестселлеров, стала поддержка разработчиков коммерческого ПО. И тут мы не можем пройти мимо фирмы Borland (ныне Inprise). Разработанный ею Turbo Pascal во всех его модификациях является в России одним из самых популярных продуктов. Интегрированная оболочка, которая включает в себя редактор, компилятор, компоновщик и отладчик, вместе с интерактивной справочной системой сделали разработку программ на Паскале делом простым и понятным практически любому человеку. Но так было не всегда. Например, в начале восьмидесятых автору довелось поработать с одним из первых компиляторов Паскаля на платформах DEC. В нем сначала нужно было в редакторе создавать программу, затем однопроходный компилятор выдавал код на ассемблере, далее приходилось транслировать его в объектный код, компоновать с системными библиотеками и только после этого запускать программу. Поиск ошибок (без встроенного отладчика, который сейчас просто показывает вам строку, где произошла оши бка) был делом, требующим терпения, и, самое главное, процессом весьма длительным. Кроме создания интегрированной оболочки, Borland ввел в Pascal поддержку модульного программирования, а начиная с версии 5, и поддержку объектно-ориентированного программирования. В настоящее время действуют три стандарта языка. Первый из них — нерасширенный Паскаль (unextended Pascal) был разработан в 1983 году (Смотрите стандарты ANSI/IEEE 770Х3 97-1993 и ISO 7185:1983. Стандарты ISO доступны по адресу http://www.iso.ch/welcome.html) и практически полностью совпадает с описанием языка в нотации Йенсен-Вирта. Второй — Extended Pascal — содержит расширения, касающиеся модульного программирования (раздельная компиляция модулей, импорт-экспорт подпрограмм, интерфейсная часть и реализация), и дополнен рядом процедур и функций (прямой доступ к файлам, работа со строками и т д.) (Смотрите стандарты ANSI/IEEE 770Х3.160-1989 и ISO/IEC 10206:1991). Последний — объектный Паскаль (Object-Oriented Extensions to Pascal), в отличие от первых двух, формально не утвержден, но оформлен в виде отчета (ANSI Technical Report) в 1993 г. (Смотрите ANSI/X3-TR-13-1994) Объектный Паскаль поддерживает классы, обладающие свойствами и методами, насл едование классов, переопределение методов у потомков (полиморфизм) и ряд других атрибутов объектно-ориентированного программирования. DelphiВ России Borland Delphi появляется в конце 1993 г. и сразу же завоевывает широкую популярность. Новые версии выходят практически каждый год. В них реализуются все новые мастера, компоненты и технологии программирования. Действительно, процесс разработки в Delphi предельно упрощен. В первую очередь это относится к созданию интерфейса, на который уходит 80% времени разработки программы. Вы просто помещаете нужные компоненты на поверхность Windows-окна (в Delphi оно называется формой) и настраиваете их свойства с помощью специального инструмента (Object Inspector). С его помощью можно связать события этих компонентов (нажатие на кнопку, выбор мышью элемента в списке и т.д.) с кодом его обработки — и вот простое приложение готово. Причем разработчик получает в свое распоряжение мощные средства отладки (вплоть до пошагового выполнения команд процессора), удобную контекстную справочную систему (в том числе и по Microsoft API), средства коллективной работы над проектом, всего просто не перечислить. Вы можете создавать компоненты ActiveX без использования Microsoft IDL, расширять возможности web-сервера (скрипты на стороне сервера), практически ничего не зная об HTML, XML или ASP. Можно создавать распределенные приложения на базе СОМ и CORBA, Интернет- и intranet-приложения, используя для доступа к данным Borland DataBase Engine, ODBC-драйверы или Microsoft ADO. Появившаяся, начиная с Delphi 3, поддержка многозвенной технологии (multi-tiered) доступа к данным позволяет создавать масштабируемые приложения (относительно слабо зависящие от сервера БД) за счет перенесения методов обработки информации (бизнес-правил) на среднее звено. Как уже говорилось ранее, в Delphi используется язык Object Pascal, который постоянно расширяется и дополняется Borland. Язык в полной мере поддерживает все требования, предъявляемые к объектно-ориентированному языку программирования. Как и положено строго типизированному языку, классы поддерживают только простое наследование, но зато интерфейсы могут иметь сразу несколько предков. К числу особенностей языка следует отнести поддержку обработки исключительных ситуаций (exceptions), а также перегрузку методов и подпрограмм (overload) в стиле C++. К числу удачных, на взгляд автора, относится также поддержка длинных строк в формате WideChar и AnsiChar. Последний тип (AnsiStrmg) позволяет использовать все прелести динамического размещения информации в памяти без всяких забот о ее выделении и сборке мусора Delphi делает это автоматически. Для поклонников свободного стиля программирования имеются открытые массивы, варианты и вариантные массивы, позволяющие размещать в памяти все, что душе угодно и смешивать типы данных. Вы можете создавать свои собственные компоненты, импортировать ОСХ-компоненты, создавать «шаблоны» проектов и «мастеров», создающих «заготовки» проектов. Мало того, Delphi предоставляет разработчику интерфейс для связи ваших приложений (или внешних программ) с интегрированной оболочкой Delphi (IDE). Таким образом, вы можете использовать Delphi для создания как самых простых приложений, на разработку которых требуется 2-3 часа, так и серьезных корпоративных проектов, предназначенных для работы десятков и сотен пользователей. Причем для этого можно использовать самые последние веяния в мире компьютерных технологий с минимальными затратами времени и сил. Ну, и одна из самых последних новостей от Inprise обещает, что в ближайшем будущем вы сможете переносить приложения, разработанные в Delphi, на платформу Linux. Более подробную информацию о Delphi можно получить на сайтах www.inprise.com и www.inprise.ru. Существует большое количество сайтов, посвященных Delphi, например «Королевство Delphi» — delphi.vitpc.com, Torry's Delphi Pages — www.torry.ru. Последний содержит большое число ссылок на ресурсы, связанные с Delphi. Ну а если вы уже давно знакомы с этим продуктом, то на сайте www.brainbench.com можно бесплатно протестироваться в качестве программиста Delphi 3 и получить по почте сертификат. Александр Александровский Статья из журнала BYTE/Россия, Март 2000 Для того, чтобы наглядно продемонстрировать использование описанных языков на практике нами была выбрана задача, в которой требовалось ввести со стандартного ввода или из файла ряд целых чисел, а затем вывести только нечетные из них, причем в обратном порядке следования. Это одна из простейших задач, которая существенным образом требует для своего решения работы с массивами, циклами, ветвлением и вводом/выводом, а также позволяет продемонстрировать вызовы подпрограмм. При этом она обозрима и легко воспринимается. Листинг. Object РаsсаlProgram BYTE_Example; // Oject Pascal, Delphi 5 {$APPTYPE CONSOLE} // Прагма, делающая приложение консольным uses SysUtils, Classes; // Используемые внешне модули type ТМуArray = class (TObject) // Класс - динамический массив private FArray : array of integer; // Поле для хранения данных FPos : integer; // Счетчик введенных элементов public function GetLastNumber:integer; // номер последнего элемента function GetElement(Poz:integer):integer; // Элемент по номеру procedure AddElement(Value:integer); // Добавление в конец массива constructor create; // Конструктор destructor Destroy; override; // Деструктор end; const delta=100; // Приращение динамического массива procedure TMyArray.AddElenient(Value: integer); begin if FPos>High(FArray) then // Нужно увеличить массив? SetLength(FArray,Length(FArray)+delta); // Увеличим на Delta FArray[FPos]:=Value; // Добавляем элемент Inc(FPos); end; constructor ТМуArray.create; // Конструктор динамического массива begin inherited, // Вызываем конструктор предка SetLength(FArray,delta); // Создали массив из delta-элементов FPos:=0; // Счетчик элементов массива end; destructor ТМуАrrау.Destroy; // Деструктор динамического массива begin // Уничтожаем объект FArray:=nil; // Удаляем массив inherited; // Вызываем деструктор предка end; function ТМуАrrау.GetElement(Poz: integer): integer; begin result := FArray[Poz] end; // Читаем элемент по номеру function ТМуАrrау.GetLastNumber: integer; begin result :=FPos-1; end; // Получаем количество элементов массива procedure ReadElementsFromFile; // Читаем из файла и выводим нечетные на экран var F: file of Integer; // Файл с целыми числами МуАrrау: ТМуАrrау; // Объект для хранения чисел i: integer; // Переменная цикла begin МуArray := ТМуArray.create; // Создали объект-массив AssignFile(F, 'TestFile.dat'); // Открываем файл reset(F); while not eof (F) do begin read(F,I); // Читаем элемент МуArray.AddElement(I); // Добавляем элемент в массив end; closeFile(F); // Закрываем файл for i := МуArray.GetLastNumber downto 0 do // Выводим в обратном порядке if МуArray.GetElement(i) mod 2 <> 0 then // Выводим только нечетные writeln( intTostr(MyArray.GetElement(i))); // элементы в колонку МуArray.Free; // Уничтожаем массив end; begin // Главный модуль ReadElementsFromFile end. Разделы: Статьи | Компоненты | Plug-in's | Документация | Исходники | Программы | Игры | Изображения Уважаемые читатели! Отправляйте полезные компоненты/модули, исходники, собственные программы/игры, документацию - книги, учебники и они будут размещены на сайте.
Ведущий раздела: Bruder Кто есть кто (грабли) Юзер - человек, наступающий на грабли Чайник - ничинающий юзер, ни разу не наступавший на грабли и потому уверенный, что граблей не существует Ламер - юзер, регулярно наступающий на грабли, но по-прежнему уверенный что граблей не существует. Узкий специалист - юзер, в совершенстве владеющий наступанием на одни и те же грабли Широкий специалист - юзер, имеющий на лбу более двух шишек. Программер - тот, для кого в наступании на грабли важнее всего результат. Устав наступать на чужие грабли, изготавливает свои собственные. Продвинутый программер - программер, наступающий на каждые грабли не более двух раз. Копирайт - концепция, ограничивающая количество доступных для наступания граблей финансовыми возможностями юзера. Геймер - тот, для кого в наступании на грабли важнее всего процесс. Обычно не способен изготовить собственные грабли. Читер - разновидность геймера; наступает только на грабли с поролоновыми насадками на ручке и обычно не больше одного раза. Хакер - тот, кто способен наступить на грабли, даже если они спрятаны в сарай и заперты на замок. Хакер-идеалист - благородный борец за право каждого наступать на неограниченное количество граблей. Microsoft - корпорация, всемирный лидер по производству граблей Билл Гейтс - мифическое существо из программерского фольклора; злой дух - покровитель граблей. Апгрейд - процесс перманентной траты денег на покупку все новых граблей, каждые из которых бьют больнее предыдущих. Бета-версия - версия, в которой грабли видны невооруженным глазом. Релиз - версия, в которой грабли присыпаны листьями. Совместимость версий - принцип, позволяющий новым граблям попадать точно по шишке от предыдущих. Ассемблер - язык программирования, позволяющий наступать на грабли несколько миллионов раз в секунду. Локальная сеть - технология, позволяющая получить по лбу, даже когда на грабли наступает кто-то другой. Интернет - технология, позволяющая наступить на грабли, находящиеся на другой стороне земного шара. Сетевая конференция - технология, позволяющая каждому наступить не только на свои, но и на чужие грабли. Русские кодировки - подарочный набор набор граблей для пользователей интернета. Дружественный интерфейс - резиновая накладка на ручку граблей. Гибкий (настраиваемый) интерфейс - накладка на ручку граблей, которую можно двигать, подгоняя под высоту своего лба Графический интерфейс - грабли, позволяющие регулировать цвет и интенсивность искр после удара по лбу. Ненадежная система - грабли, которые бьют вас даже тогда когда вы на них не наступаете. Надежная система - грабли, которые бьют вас по лбу, даже когда вы стоите к ним спиной. Многозадачность - концепция, позволяющая наступать на несколько граблей одновременно. Объектно-ориентированное программирование - метод изготовления граблей по принципу матрешки. Мануал - книга, описывающая различные способы наступания на грабли. Никогда не используется ламерами и хакерами. Продвинутые программеры используют ее после того, как наступят на те же грабли во второй раз. Техподдержка - служба, дающая советы, что делать после наступания на грабли. Обычно первый ее совет - наступить на грабли еще раз и сравнить ощущения. Источник: bayanov.net :)) Присылайте компьютерные анекдоты, рассказы и истории по этой ссылке и они будут опубликованы в ближайших выпусках рассылки. WWW: http://www.delphi.int.ru/ E-mail: admin@delphi.int.ru; support@delphi.int.ru
Архив рассылки: http://subscribe.ru/archive/comp.soft.prog.delphifaq Ведущий рассылки: Ерёмин Андрей
|
В избранное | ||