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

Уроки по Delphi для чайника, который хочет стать самоваром Внеурочье


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

Другие материалы на сайте "ЕЖИдневник" 

Внеурочье


Последние две недели были тяжкими для нашего проекта «Уроки по 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 ©Є«¬БВГ­®Ї'.


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


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.samovar
Отписаться

В избранное