Главная страница ЕЖИдневника


Уроки по Delphi

Урок 6
Внеурочье
Урок 5 Графические часы
Урок 4
Внекласс-1
Урок 3
Урок 2
Урок 1
Урок 0
Уроки по Dephi

Внеурочье


Последние две недели были тяжкими для нашего проекта «Уроки по Delphi для чайника, который хочет стать самоваром». Алёна Батьковна с трудом смогла найти время только для того, что бы сделать 4-й урок. И это не смотря на то, что 5-й урок уже давно доступен на сайте (и прошёл в рассылке), а следующий урок ждёт не дождётся своей очереди. Да простят нас наши уважаемые читатели за то, что мы застопорились на месте, но приходится ждать пока Алёна Батьковна раскачается. В своё оправдание могу сказать только то, что не смотря на нехватку времени мы ответили всем, кто нам писал.

Думаю, что 6-й урок мы выложим в ближайшие дни, а пока предлагаем вашему вниманию некоторые из вопросы наших читателей с моими ответами на них.

Ваш, Александр Старогодов.



По 4-му уроку:


Почему-то мой flash get не может выкачать архив с файлами к уроку 4 (все предыдущие выкачал без проблем)

Наверное это потому, что такого архива в природе не сущетсвует. ;-) Точнее не существовало до сегодняшнего дня, а на сайте красовалась надпись: «Исходные тексты программы в ближайшее время будут здесь.;о)». Теперь файлы к 4-му уроку доступны, а вот к 5-му по прежнему нет.


Ещё про memo=) вот я ставлю ReadOnly в true, TabStop в false, текст нельзя удалить или изменить и табом на него перейти нельзя, НО при этом текст можно выделить, можно ли сделать так, чтобы его нельзя было выделять? Можно конечно, поставить свойство Enabled для memo в false, тогда memo будет недоступным, но при этом цвет текста становится сереньким, т.е. это не лучший выход из данной ситуации=)

Самое простое не пускать фокус в поле memo. Как это делается мы подробно обсуждали на форуме.
Только Вам потребуется какой-нибудь компонент способный принимать фокус - ещё один memo или кнопка какая-нибудь. Их нужно спрятать от пользователя, например, задав нулевую ширину.



По 5-му уроку


Вроде часы со стрелочками у меня работают=) Только вот такой вопрос: можно ли сделать так чтобы минутная стрелка перемещалась один раз в минуту, а не медленно двигалась по кругу? (аналогично часовая)

Конечно, можно. Для минутной стрелки нужно делать угол кратным величине Pi/30. Например, так: u := Round(u*30/Pi)/(30/Pi); или так: u := Int(u*30/Pi)/(30/Pi); Функция Round, напомню, округляет числа, а Int - отбрасывает дробную часть. (Вообще-то между ними есть ещё одно очень серьёзное отличие: Round возвращает целочисленное значение, а Int - вещественное, но для данной задачи это не важно). Для часовой - думайте сами. :-)


На счёт второй формы, можно просто задать ей свойство Visible в true, тогда её будет видно при запуске, но она будет типо второстепенной.

Можно. Я хотел просто продемонстрировать возможность в любой момент показать форму (метод Show), а в обном из следющих уроков - спрятать её (метод Hide). Для этих целей можно присваивать значения true и false свойству Visible - оба способа практически равнозначны (в действительности и во втором способе вызываются методы Show и Hide, и в первом изменяются значения Visible), но рекомендуют использовать методы, как более корректный с точки зрения объектно-ориентированного программирования подход.


Теперь на счёт закрашивания цветом фона и вообще цвета фона=) Как его (цвет фона) задавать? да и цвет линии=) В паскале для этого дела есть функции SetColor - для рисования и SetBkColor - для фона. В Делфи я ниче подобного не нашла=(

У Canvas есть свойства Brush (кисть) и Pen (карандаш), так вот, за закрашивание областей отвечает кисть, а за рисование карандаш. У них есть куча свойств, в том числе и цвет. Нажмите F1, выделив компонент Image, щёлкните по ссылке Properties, найдите Canvas, опять Properties, и т.д. - почитайте сами что есть у Brush и Pen. Мы этим тоже обязательно займёмся, но немного позже.


И ещё на счёт паскаля, там анимацию можно делать двумя способами или страницами или перерисовывать, так вот, при перерисовывании сначала рисуется что-то цветом, потом закрашивается цветом фона, потом перерисовывается и т.д. Не знаю, можно ли с нашими стрелками сделать нечто подобное=)

В Паскале рисование производится непосредственно работой с видеокартой, в Delphi тоже возможен подобный вариант с использованием, например, библиотеки DirectX, но сейчас мы рисуем используя возможности операционной системы. Рисунок у нас простенький, так что всё работает без проблем. В принципе можно эмулировать привычные Вам из Паскаля страницы с помощью двух одинаковых компонентов Image, расположенных друг под другом, и меняя у поочерёдно меняя у них свойство Visible.


И ещё один вопрос на счёт часов, то что графический таймер немножечко отстаёт от текстового - это нормально?

Помните зачем мы в третьем уроке уменьшили Interval у таймера? А здесь мы этого не сделали - и вот плоды разгильдяйства. :-) В действительности, я жду этого вопроса от Алёнки и собираюсь предложить более цивилизованное решение проблемы.



Общие вопросы


Подскажите, ради Бога, как создать новый проект. То есть, создаться он создаётся. Но при сохранении спрашивает, как его сохранить: как файл проекта (dpr) или как программный модуль (pas). В первом случае отсутствует программный модуль, а при открытии файла проекта открывается текст программы, и не открывается форма (несмотря на наличие файла формы). Во втором случае начисто отсутствует файл dpr.

????? :-0
Когда Вы запускаете Delphi создаётся новый проект. Автоматически. Если только Вы не выставили галочку ProjectDesktop в меню "Tools/Environment Options" в блоке "Autosave options". В этом случае будет открываться тот проект с которым Вы работали раньше. Я советую эту галочку не выставлять.
Если Вы уже работаете в каким-то проектом и хотите создать новый, то с помощью кнопочки "New" или пункт меню "File/New..." откроется окно, в котором нужно выбрать что создавать. В левом верхнем углу есть значок "Application" (он даже выбран по умолчанию). После нажания "Ok", новое приложение будет создано. Или выберите пункт меню "File/New Application". Если старый проект не был сохранён, то Delphi спросит сохранять или как. (Да, старый проект можно предварительно закрыть "Close all")
Новый проект лучше всего сохранять с помощью кнопочки "Save all", тогда Delphi спросит как сохранить сам проект и как сохранить модуль.
А вот сохранение уже существующего проекта под новым именем - задача хитрая. С помощью кнопки "Save project as" будет сохранён только сам проект и он будет использовать те же модули (не в новой папке, а в старой, то есть физически те же), что и старый проект. Простое копирование в нужную папку модулей (или сохранение их в новую папку или под новым именем с помощью "Save as") проблему не решит. Надо будет переподключать модули к проекту. Не стоит использовать этот путь если он действительно не нужен.
Названия пунктов меню приведены для Delphi5, но думаю, что в Вашей версии существенных отличий не будет.


Не могли бы вы выложить коды символов, т.е. #8-, #13- и т.д.

Символы с кодами меньше 32 - это служебные символы, доставшиеся нам в наследство от телеграфистов. На экране они не печатаются. Символы с кодами 32 и больше - печатаемые символы.
Реально требуются всего 3 служебных символа: #9 - табуляция, #13, #10 - перевод строки и возврат каретки используются вместе, в указанном порядке, для обозначения конца строки в файлах в операционных системах DOS/Windows. Иногда удобно обращаться к пробелу по его коду: #32, но чаще всего проще использовать само обозначение пробела. Ко всем символам с кодами больше 32 проще обращаться по их обозначениям: '§Ёnopqr ©Є«¬БВГ­®Ї'.


Все комментарии (цензурные и по возможности грамотные) рассматриваются в порядке живой очереди, принимаются к сведению и даже публикуются на сайте. Так что если тебе есть что сказать по поводу вышепрочитанного - мыль сюда!!! ;)

пользовательское соглашение, политика конфиденциальности