Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование на Delphi #20
Информационный Канал Subscribe.Ru |
Программирование на Delphi. Выпуск №20: 12.02.05. |
||||||||||||||||||||||||||||||||||||||||||||
Количество подписчиков: 1864. Не забывайте посещать наш форум. Top-10 Readers:
Правила нашей рассылки: |
||||||||||||||||||||||||||||||||||||||||||||
69. Народ, кто подскажет, как сделать шахматную доску и как реализовать перемещение фигур (как в других шахматных программах)? Если не трудно, приведите пример. [Ответить]. 70. Всего три вопроса: 71. Кто знает, есть ли компонент или что-нибудь для работы с SMS? Где можно поискать информацию относительно этой темы? Интересует именно отправка SMS из Инета а не через мобилу с датакабелем. [Ответить]. 72. Подскажите, существует ли возможность перенесения программы написанной на Delphi с ПК на КПК и что для этого нужно и по возможности где это можно достать? [Ответить]. 73. Скажите, возможно ли программно добавлять на форму компоненты? Если
можно, то как? [Ответить]. |
||||||||||||||||||||||||||||||||||||||||||||
5. (Стиль Windows XP). [Отвечает: Igor]: Небольшое дополнение к ответу VeroLom'а: 67. (Документация по работе с реестром). [Отвечает: Iron Monk]: Очень полезные ссылки по всем вопросам, в том числе и по реестру. [Отвечает: Ramon]: У Фленова Михаила есть отличная книженция "Библия Delphi". По-моему она еще лежит e-bookой на www.cydsoft.com. В любом случае на этом сайте море полезной инфы и не только по реестру. 66. (Преобразование 24-битной картинки в 16-битную). [Отвечает: Iron Monk]:
65. (События OnMouseWheel). [Отвечает: Ramon]: У некоторых серьезных вещей (типа Form) есть события OnMouseWheel, OnMouseWheelUp, OnMouseWheelDown. OnMouseWheel - возникает когда колесико движется в любом направлении. В параметрах обработчика есть такая вещь, как WheelDelta: Integer. Это число характеризует движение колеса. Если отрицательное - колесо повернуто вниз, если положительное - вверх (а вообще это типа угол поворота колеса). OnMouseWheelUp - возникает тогда и только тогда, когда колесо движется вверх. OnMouseWheelDown - возникает, когда колесо повернуто, соответственно вниз. У всех трех обработчиков есть (совершенно бесполезный, на мой взгляд) параметр MousePos: TPoint - координаты курсора, Handled: Boolean и Shift: TShiftState, как в OnKeyDown. Так что для идентификации вхелинья колеса есть несколько способов ;) 64. (Верхние и нижние индексы в исходнике). [Отвечает: Садовников Владимир]: Этого нельзя сделать, ибо это противоречит синтаксису языка. Редактор языков - это не Word-подобный редактор. Вы также можете ответить на предыдущие вопросы. Поскольку на них уже ответили как минимум раз, они больше не публикуются в рассылке. Но если вы можете что-то добавить к ответам других, пожалуйста, отвечайте - ответы будут опубликованы. Найти предыдущие вопросы вы можете на нашем сайте: http://www.delphi-faq.fatal.ru/ или в спец-выпусках рассылки. |
||||||||||||||||||||||||||||||||||||||||||||
Delphi 4: Автоматизация приложений MS® Office® для эффективного анализа результатов
Глава 1. Работа с MS Excel.Часть 3. Создание или открытие книги.Евгений Старостин. В качестве примера я беру проект из предыдущей моей статьи и стану его понемногу расширять, отвечая на вопросы, появившиеся у специалистов разного профиля и кругозора. Эти вопросы получены мною из двух "источников": как реакция на мою статью и, извините, из переписки по XL Report Support. Эти две вещи уж очень сильно пересекаются, поэтому я и обращаюсь к обоим источникам моего вдохновения. Я не буду последователен в своих рассуждениях, местами буду писать подробно, местами - кратко. Попросту, я опишу некоторые часто встречающиеся проблемы и решения этих проблем. И еще! Я решил совсем опустить в своем пространном (как обычно) повествовании тонкости работы с Excel в Delphi 5.0, так как считаю, что работа с импортированной библиотекой типов принципиально одинакова и в версии 4, и в версии 5. Различен, разве что, только уровень импорта этой самой библиотеки. К тому же, я уже полностью "переехал" на Excel 2000, поэтому тестирую весь код, который приведен здесь, именно в нем. Итак, поехали. Создание или открытие книги.Повторюсь, не смотря на то, что я уже писал об этом в предыдущей статье. В главной форме проекта-примера я объявил свойство IWorkbook. Оно будет содержать интерфейс книги, которую мы будем создавать и использовать. Естественно, в обработчике FormDestroy я его освобождаю. property IWorkbook: Excel8TLB._Workbook read FIWorkbook; Книгу можно создать разными способами и с разными намерениями. Если необходимо создать абсолютно чистую книгу, достаточно выполнить следующий код: if Assigned(IXLSApp) and (not Assigned(IWorkbook) ) then FIWorkbook := IXLSApp.Workbooks.Add(EmptyParam, 0); Вопрос в том, зачем нам может понадобиться новая книга, с количеством пустых листов, выставленным по умолчанию. Сегодня, я не могу уже ответить на этот вопрос, ибо не создаю новых пустых книг. Коллекция Workbooks содержит все открытые книги и предоставляет возможность кое-как управлять всем этим. Боже, как убоги коллекции от Microsoft, и особенно поиск в них! Я отклонюсь, но это надо видеть. Вот пример поиска книги с заданным именем, приведенный как совет в MSDN Office Developer. Public Function SheetExists(strSearchFor As String) As Boolean SheetExists = False For Each sht In ThisWorkbook.Worksheets If sht.Name = strSearchFor Then SheetExists = True End If Next sht End Function Это вам не IndexOf писать. Сами ищите! А я так иделаю. Но, далее... Метод Add этой коллекции (читай, метод интерфейса) позволяет добавить книгу к этой коллекции, пустую либо по шаблону. Первый параметр этого метода, Template (из справки по Excel VBA), может принимать имя файла с путем. Поэтому, выполнив код if Assigned(IXLSApp) and (not Assigned(IWorkbook) ) then FIWorkbook := IXLSApp.Workbooks.Add(ExtractFilePath(ParamStr(0)) + 'Test.xls', 0); вы получите книгу, идентичную файлу "Test.xls" с именем Test1.xls. Именно этим способом я создаю все свои отчеты, так как создаю их по заранее разработанным шаблонам. Естественно, что это шаблоны XL Report. Если же необходимо просто открыть уже существующий файл, то используйте метод Open этой же коллекции: if Assigned(IXLSApp) and (not Assigned(IWorkbook) ) then FIWorkbook := IXLSApp.Workbooks.Open(ExtractFilePath(ParamStr(0)) + "Test.xls', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, false, 0); Понимаю, что в душе нормального программиста такой код вызовет отвращение. Как-то я даже получил гневное письмо о собственной ненормальности из-за того, что использую ранее связывание и кучу EmptyParam. Впрочем, я не сильно агрессивный человек (правда, только в переписке), и отвечать не стал. В конечном итоге, раннее связывание дает мне немного преимуществ, но я за него. Я не могу помнить все методы и их параметры из Excel Type Library, поэтому получаю их (только при раннем связывании, естественно) из подсказок редактора Delphi - продуманная вещь этот редактор. А чтобы не мучаться с написанием такого количества EmptyParam, можно написать и так: if Assigned(IXLSApp) and (not Assigned(IWorkbook)) then IDispatch(FIWorkbook) := OLEVariant(IXLSApp.Workbooks).Open( FileName := ExtractFilePath(ParamStr(0)) + 'Test.xls'); Но, мы отклонились. Что же стоит за таким количеством параметров по умолчанию в методе Open? Да, много чего. Из этого "громадья" я использую лишь несколько вещей. Их я и опишу, а заинтересовавшихся остальными отсылаю к справке по Excel VBA. Вот объявление этого метода в импортированной библиотеке типов: function Open(const Filename: WideString; UpdateLinks: OleVariant; ReadOnly: OleVariant; Format: OleVariant; Password: OleVariant; WriteResPassword: OleVariant; IgnoreReadOnlyRecommended: OleVariant; Origin: OleVariant; Delimiter: OleVariant; Editable: OleVariant; Notify: OleVariant; Converter: OleVariant; AddToMru: OleVariant; lcid: Integer): Workbook; safecall; В FileName необходимо передать имя открываемого файла, желательно указав путь его нахождения. Иначе, этот файл Excel будет искать в каталоге по умолчанию. Чтобы файл был запомнен в списке последних открытых файлов, в AddToMru можно передать true. Иногда я знаю, что файл рекомендован только для чтения (не путать с "парольной" защитой книги). Тогда при открытии выдается соответствующее сообщение. Чтобы игнорировать его, можно передать в IgnoreReadOnlyRecommended true. Вот, пожалуй, и все мои скудные знания об этом методе. Впрочем, с помощью его мне приходилось открывать и файлы текстовых форматов с разделителями. Но тогда я обращался к чудесному "пишущему" плейеру VBA и записывал с его помощью макросы, затем правил их по необходимости и все отлично получалось. Этим же способом разрешать "всяческие" тонкие вопросы рекомендую и вам. На главной форме проекта-примера я создал кнопку, с помощью которой можно открыть (или создать) файл и RadioGroup к ней, где можно указать каким из приведенных выше способов файл этот открывается. Для полного удовлетворения сюда же была добавлена обработка исключения. Вот что у меня получилось: procedure TForm1.btnCreateBookClick(Sender: TObject); var FullFileName: string; begin FullFileName := ExtractFilePath(ParamStr(0)) + 'Test.xls'; if Assigned(IXLSApp) and (not Assigned(IWorkbook)) then try case rgWhatCreate.ItemIndex of // По шаблону 0: FIWorkbook := IXLSApp.Workbooks.Add(FullFileName, 0); // Просто откроем 1: FIWorkbook := IXLSApp.Workbooks.Open(FullFileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, false, 0); // Пустая книга 2: FIWorkbook := IXLSApp.Workbooks.Add(EmptyParam, 0); end; except raise Exception.Create('Не могу создать книгу!'); end; end; Далее во всех примерах я подразумеваю, что вы всякий раз будете создавать новую книгу по шаблону с помощь кнопки "Create workbook". Книга-шаблон названа как прежде Test.xls и включена в проект. Все остальные примеры опираются именно на эту книгу и ее листы. В этой книге я подготовил кое-какие данные и поименованные области для последующих примеров работы с Excel. Для каждого примера кода я буду добавлять кнопку и, возможно, RadioGroup к ней с возможностью выбора варианта работы. Не судите меня строго за то, что главная и единственная форма проекта-примера получится громоздкой и некрасивой. Не это здесь главное. Итак, всегда создавайте по кнопке книгу. Далее нажимайте кнопку, на которую указывает конкретный пример кода, и наблюдайте. Буду рад, если кто-то из читателей создаст более приемлемый демонстрационный проект для этой статьи. 1. Скриншот из 2-ой статьи: Открыть. 2. 1-ая часть цикла статей по Excel: Открыть. 3. 2-ая часть цикла статей по Excel: Открыть. 4. 3-ая часть цикла статей по Excel: Открыть. 4. Демо-программа-1 к статьям: Скачать. Присылайте свои статьи по адресу delphi-faq@list.ru с темой 'Clause' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). |
||||||||||||||||||||||||||||||||||||||||||||
В данном разделе публикуются различные ссылки, причём не только по Delphi но и по OpenGL, WinAPI, DirectX и т.д. (они могут быть на других языках, например, на Си). Присылайте свои ссылки на документацию по программированию. http://www.openwatcom.org |
||||||||||||||||||||||||||||||||||||||||||||
Свои "добавки" присылайте сюда. Только большая просьба: не присылайте файлы сразу, сначала описания и объёмы. MxCalendar v1.21 - Очень симпатичный календарик для ваших приложений. (ZIP, 338 Кб).
|
||||||||||||||||||||||||||||||||||||||||||||
Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите баннер на главной странице своего сайта. Подробнее о том, как стать другом, можно прочитать здесь: http://www.delphi-faq.fatal.ru/banner.htm, а узнать о всех наших друзьях - на странице http://www.delphi-faq.fatal.ru/friends.htm http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом. |
||||||||||||||||||||||||||||||||||||||||||||
Василий Иванович диктует Петьке, сидящему за телеграфом: *** Когда на одной персоналке запустили TI (переворачивалка экрана), а девушки об этом не знали и спросили преподавателя, он (доцент! кафедры вычислительной техники) высказал предположение: *** Пророчество Конца Света: *** Неохотно и несмело *** Люблю я глюк в ядре мастдая, Присылайте свои "компьютерные" анекдоты по этой ссылке: Delphi-FAQ@list.ru и они обязательно будут опубликованы! Нецензурные анекдоты не публикуются! |
||||||||||||||||||||||||||||||||||||||||||||
Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу! Если вы не нашли ответа на свой вопрос, не отчаивайтесь! Ведь количество подписчиков постоянно растёт и, наверняка, найдётся тот человек, который поможет вам! На сегодня всё. До встречи через неделю! |
||||||||||||||||||||||||||||||||||||||||||||
Сайт рассылки: http://www.delphi-faq.fatal.ru/ E-mail: Delphi-FAQ@list.ru Страница рассылки: http://subscribe.ru/catalog/comp.soft.prog.delphifaq |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.delphifaq |
Отписаться |
В избранное | ||