Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование на Delphi #26
Информационный Канал Subscribe.Ru |
Программирование на DELPHI |
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Выпуск #26 (14 мая 2005 г.) |
||||||||||||||||||||||||||||||
Ничего говорить не буду :) Очередной укороченный выпуск. Сайт продолжает переезд. Количество подписчиков: 2539. |
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Вопрос #124. Автор вопроса: Андрей. Вопрос отправлен: 04.05.2005 10:31. Вопрос: Здравствуйте! У меня Delphi 7, где мне найти QuickReport? [Ответить на вопрос]. Ответ ожидается до 30.05.2005 10:31:00. Вопрос #125. Автор вопроса: Денис. Вопрос отправлен: 07.05.2005 21:39. Вопрос: Что такое записной тип данных? [Ответить на вопрос]. Ответ ожидается до 30.05.2005 21:39:00. Вопрос #126. Автор вопроса: Вениамин. Вопрос отправлен: 06.05.2005 14:37. Вопрос: Есть текстовый документ и программа с 5-тью Label. +ВОПРОС1 Надо, чтобы при открытии программы Label1 превращался в вопрос1, Label2 в ответ1 и т.д. до Label5, который превращается в ответ4. Т.е. программа должна выбрать из блокнота ЛЮБУЮ строку, начинающуюся на \"+\" (пометка вопроса) и предоставить варианты ответов, задав переменной PRAVILNO значение 1, 2, 3 или 4. Перед каким ответом стоит \"_\", тот номер и будет значением переменной (Это будет правильный ответ). [Ответить на вопрос]. Ответ ожидается до 30.05.2005 14:37:00.
|
||||||||||||||||||||||||||||||
104.
(Проблема с путями при установке компонентов). Полный текст вопроса: [Отвечает: Акишин Андрей Владимирович, 04.05.2005 09:40]: Можно попробовать скопировать компоненты в папку с проектом, тогда Delphi обязательно их найдёт. [Отвечает: Yurchik, 06.05.2005 02:47]:
В первую очередь, Дельфи ищет все подключаемые файлы в папке
<установленная Дельфи>\LIB. И именно туда и нужно скопировать все
необходимые файлы нового компонента. Мною практическим способом
установлено, что необходимыми являются такие файлы: *.dcu *.dfm *.res
Может есть еще какие-то типы, но я с ними не сталкивался. Для удобства
я создал файлик copy2lib.bat, и при создании нового компонента я
добавляю его в папку с этим компонентом. Вот его содержание
(Дельфи у меня установлена в Program Files\Borland\Delphi6):
[Отвечает: Сергей Азачем , 10.05.2005 16:12]: Есть несколько вариантов. 1. Создавать компонент используя IDE: Component -> New Component. В этом случае нужные пути будут прописаны Delphi "автоматом". 2. Указать каталог с откомпилированным компонентом Tools -> Environment Options Закладка Library, поле Library path В нем нужно указать путь к файлам DCU. 3. Если использовались опции по умолчанию, то файлы DCU нужно скопировать в каталог %DELPHI%\Projects\Bpl (как правило "С:\Program Files\Borland\Delphi5Projects\Bpl\". Если комонент использует формы или дополнительные ресурсы, то соответствующие файлы нужно скопировать в каталог с файлами DCU. 106.
(OnExit в ячейках StringGrid). Полный текст вопроса: [Отвечает: Dasha, 04.05.2005 17:05]: Предлагаю использовать событие OnSelectSell, происходит, когда меняется выделенная ячейка. При выделении сохранять номер и содержимое в какие-нибудь переменные, опять же при переходе сначала проверять соответствие ячейки под сохраненным номером сохраненному содержимому. [Отвечает: Feniks, 05.05.2005 11:08]: На счет StringGrid точно сказать не могу, но зато могу посоветовать вместо него использовать компонент TVirtualStringTree. Этот компонет сочетает в себе такие стандартные компоненты, как TStringGrid, TTreeView, TListView. У него очень большой список событий, включая те, которые Вам нужны. И делается это очень легко. Компонент фриварный, с сорцами, ставится на Delphi 5 - Delphi 2005. А так же на C++Builder 5 и 6. И содержит Хелп и примеры. Родной сайт: www.delphi-gems.com. Там же есть и готовые Демо-проекты. Или же можно попробовать порытся в родительских классах компонента StringGrid. Возможно у какого-то его родителя есть такие события, но они не "зашарены" для своих детей, т.е. у родителя есть свойство и оно объявлено в секции Published, а у его детей это свойство не объявлено, таким образом, оно не видимо у детей. В этом случае, лучше всего, надо создать новый компонент от StringGrid и в этой секции объявить нужное свойство, поле или функцию. [Отвечает: Андрей Лучников, 12.05.2005 08:20]: Насколько я понял - нет. Я из положения вышел таким образом: в OnSelectCell (в конце кода обрабочика) запоминаю текущую ячейку (записываю в глобальные переменные ARow,ACol и значение). Соответсвенно, вначале этого события, проверяю на условие предыдущую ячейку. 107.
(Значок диаметра). Полный текст вопроса: [Отвечает: Тихонов Михаил, 04.05.2005 08:02]:
Установить в фонте набор символов 'Baltic' для Edita'a и написать например
процедуру
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
[Отвечает: Dasha, 04.05.2005 17:14]: Сделай шрифт Symbol, в нем латинская f (маленькая) становится похожа на знак диаметра. 111.
(Исходник чата для локальной сети). Полный текст вопроса: [Отвечает: Садовников Владимир, 04.05.2005 07:33]: Посмотри Delphi\Examples\Internet. Там есть как раз пример чата с использованием всего лишь двух компонентов со вкладки Internet. Эти компоненты годятся как для локальной, так и для глобальной сети. [Отвечает: Dasha, 04.05.2005 18:46]: Если бы не необходимость отслеживать присутствующих в чате, программа занимала бы несколько строк, а так получилась немного сложнее. //От ведущего: чат выслан автору вопроса, но скоро появится и на сайте. [Отвечает: magicSasha, 05.05.2005 00:26]:
Вот ссылка на исходник чата, котрый я когда то писал: [Отвечает: Evgeshka Vasilkov, 11.05.2005 22:15]: Уверен что ответ вы не опубликуете, но передайте вопрошающему, что проще чата, который есть в поставке delphi в $(delphi)\Demos\Internet\Chat\ найти нельзя. 121.
(Работа с датами). Полный текст вопроса: [Отвечает: mvp, 03.05.2005 20:27]:
[Отвечает: Антон, 04.05.2005 10:16]:
if ((y mod 4 = 0) and ((y mod 100<>0) or (y mod 400=0))) then month:=0; month:=0; Label1.Caption:='Прошло дней после Нового года до текущей даты end; Код работает только для текущего года т.е. текущая и заданная даты должны быть в одном и том же году. Суть заключается в том, что начальная (текущая) и заданная даты переводятся в кол-во дней, а потом считаются... Можно, конечно сделать специальную процедурку, но я не хочу - сделай сам ;-) [Отвечает: Dasha, 04.05.2005 19:06]:
Нужен юнит DateUtils.
[Отвечает: Feniks, 05.05.2005 11:10]: С датой и временем можно оперировать как с обычным Integer-ом. И следовательно, можно из одной даты вычесть другую. Все это есть в Хелпе у Delphi. Там же есть и функции для работы с Датой и Временем (см. DateToStr, StrToDate, Date, Now). Поэтому, если из 31/12/05 вычесть текущую дату (функция Date), то можно получить искомый результат. Если Вы плохо дружите с англ. языком, вот Вам пример: function DaysLeft(pDate1, pDate2 : TDate) : Integer; begin [Отвечает: Yurchik, 07.05.2005 00:23]: Используйте функцию DaysBetween из модуля DateUtils. Функции EncodeDate и TryEncodeDate возвращают значение TDateTime, которое соответствует указанному Году, Месяцу и Дню. Вот пример, показывающий, сколько осталось дней до Нового Года: var [Отвечает: Evgeshka Vasilkov, 07.05.2005 00:23]:
Если вспомнить что тип tDateTime является типом Double, то
вычитание из одной даты другой должно давать float число, в котором
целая часть есть количество дней.
115.
(Таймер). Полный текст вопроса: [Отвечает: Eujene Kuklev, 04.05.2005 04:58]:
// Initializes the timer used to calculate the FPS
[Отвечает: Dasha, 04.05.2005 18:56]: Можно поставить, например, ProgressBar, поставить в нем Max:=30; Потом поставить таймер, в нем по умолчанию интервал 1 сек. Тут количество полосочек ProgressBar-а не уменьшается, а наоборот увеличивается, можно поставить и наоборот. procedure TForm1.Timer1Timer(Sender: TObject); [Отвечает: Садовников Владимир, 04.05.2005 20:44]: Пихаешь таймер на форму, задаёшь ему первоначальный счётчик (например, в свойстве OnCreate) и запускаешь таймер. Потом в обработчике таймера пишешь одну строку: OnYourButtonClick(Sender); В обработчике OnYourButtonClick снова выставляешь таймер при выходе (если надо). Всё будет так, как будто бы ты через определённые промежутки времени нажимал на кнопку. Чтобы добавить ещё и "точки", то усложни обработчик OnTimer: уменьши промежуток, введи счётчик срабатываний, и после 30-го вызывай OnYourButtonClick. [Отвечает: AgentAniskin, 05.05.2005 09:26]: 1.Поставь на форму компонент Label, в его caption запиши 30 точек (сколько точек - столько секунд) без пробелов и сделай побольше шрифт. 2. Помести компонент Timer, в св-во Interval поставь 1000 (1 секунда). св-во Enabled - False; 3. В твоей кнопке OK после выполняемых действий включи Timer: Timer1.Enabled:=True; 4. В событие ONTimer таймера напиши: procedure TForm1.Timer1Timer(Sender: TObject); [Отвечает: Feniks, 05.05.2005 11:09]: Все довольно просто... Кладете компонент TTimer на главную форму Вашего проекта. В его свойствах указываете интервал, он там в миллисекундах - 1000 = 1 сек. При появлении на экране Вашей формы включаете таймер (Enabled = True). Пишите обработчик события OnTimer этого таймера, где закрываете форму и показываете следующую. И так далее... Если надо более конкретно, тогда надо исходить из поставленной задачи... Присылайте сорцы, посмотрим... :) [Отвечает: Evgeshka Vasilkov, 11.05.2005 22:21]: Это проще сделать стандартным компонентом tTimer: (пишу по памяти) tmr:tTimer; end; 120.
(Анимация). Полный текст вопроса: [Отвечает: Антон, 04.05.2005 09:27]:
Как вариант, можно сделать так:
[Отвечает: AgentAniskin, 04.05.2005 17:18]: Здраствуйте. Такой простенький вариант МИГАНИЯ: Поставьте на форму 2 таймера c одинаковым интервалом . У первого (Timer1) enabled ставим в true, у второго - False; При выключении первого включается второй и т.д. события OnTimer: procedure TForm1.Timer1Timer(Sender: TObject); procedure TForm1.Timer2Timer(Sender: TObject); [Отвечает: Dasha, 04.05.2005 19:00]: Чтобы компонент исчез, нужно сделать например: Label1.Hide, чтобы потом показать Label1.Show. Чтобы мигало, просто запустить это в цикле. Чтобы появлялось с задержкой можно перед запуском сделать его невидимым, а потом перед Label1.Show написать Sleep(кол-во милисекунд). [Отвечает: Садовников Владимир, 04.05.2005 20:46]: Конечно, можно. На то есть класс TThread и компонент TTimer, а также событие OnIdle компонента ApplicationEvents. Все они позволяют с течением времени что-то менять. Остаётся только понять, что надо делать дальше (в плане дизайна). [Отвечает: Yurchik, 07.05.2005 00:41]: Конечно можно!!! Смотри пример: var procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.Button1Click(Sender: TObject); procedure TForm1.Timer1Timer(Sender: TObject); Если что-то будет неясно, пиши мне на мыло, с радостью помогу :) [Отвечает: Feniks, 10.05.2005 14:44]: Только что похожий вопрос проскочил в одной конфе... Вариант 1. Вариант 2. procedure Name_on_screen; begin 86.
(Книга по Delphi). Полный текст вопроса: [Отвечает: Акишин Андрей Владимирович, 04.05.2005 10:46]: Есть неплохая книга "Библия Delphi" Фленова М. с примерами на CD. В ней понятно и доходчиво описано программирование на Delphi с нуля. 109.
(Dialog Box). Полный текст вопроса: [Отвечает: Dasha, 04.05.2005 17:32]: Получается, у тебя есть его hwnd. Попробуй GetWindowText, находит заголовок окна по его hwnd. 117.
(MS Agent's). Полный текст вопроса: [Отвечает: $T!13tT0, 04.05.2005 22:01]: Надо импортировать ActiveX компонент( Component->Import ActiveX Control ) Microsoft Agent Control. Далее - пример: var implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); //От ведущего: скоро на сайте будет неплохая документация по этой теме, правда, на английском языке :) 112.
(Сетевая игра по TCP/IP). Полный текст вопроса: [Отвечает: BlackRat@list.ru, 05.05.2005 06:07]: Можно воспользоваться компонентами библиотеки DelphiX. 119.
(Работа с функциями DLL). Полный текст вопроса: [Отвечает: Feniks, 05.05.2005 11:09]: Во-первых, при создании DLL надо учесть тот, что было Вам написано в уже готовом модуле на англ. языке. Если Вы не в ладах с ним, то перевожу... В DLL-ке, в принципе, может быть все что угодно. Но есть одно золотое правила: в DLL-ку, в качестве входных параметров для экспортируемых функций нельзя передавать String, и экспортируемая функция так же не должна в качестве своего результата возвращать String. Если это правило нарушается, тогда в DLL-ке в секции Uses первым модулем должен стоять ShareMem и в проекте, который юзает эту DLL-ку. Это Менеджер памяти. Этот модуль и есть не что иное, как сама DLL-ка от Borland - BORLNDMM.DLL. Которую, в таком случае, надо будет передать вместе с Вашим проектом конечному пользователю, а это не есть удобно. Тогда выход прост - не нарушать этого золотого правила и вместо String-а юзать PChar. И второй момент. Если DLL-ка написана на Delphi и ее будут юзать проекты писанные на других языках, тогда экспортируемые функции в DLL-ке надо объявлять как StdCall. Таковы правила Microsoft :( для совместимости и стыковке передаваемых параметров и возвращаемого результата. В Винде эти параметры передаются справа на лево (если я не ошибаюсь :) ), а в Паскале на оборот. Так вот этот StdCall выстраивает в стеке параметры так, как надо. Еще, функции в DLL-ке должны бать завернуты в блоки Try ... Except, Final ... End. Более точно, надо смотреть Вашу DLL-ку... Присылайте сорцы, поглядим. [Отвечает: Yurchik, 07.05.2005 00:56]:
Все экспортируемые функции библиотеки нужно объявлять с директивой
stdcall. Например так:
procedure MyProcedure; stdcall;Соответственно в своей программе пишешь: [Отвечает: Evgeshka Vasilkov, 11.05.2005 22:21]:
Чаще всего причина такой ошибки - /dev/hands . Анализируй деглюкером
твой код. Наверняка где-нить что-нить пропустил, и DLL дохнет. Часто
причиной ошибки бывает недообъявление некоторых указателей, или
вторичное закрытие валидных pointer'ов, а также иногда влияют
непроинициализированные глобальные указатели внутри DLL.
[Отвечает: Сергей Азачем, 10.05.2005 16:29]: Скорее всего, вы используете длинные строки. В этом случае нужно добавить модуль ShareMem. Возможно используете оператор move или FillChar. Проверьте соответствие размеров пересылаемых (инициализируемых) данных. А вообще вопрос очень напоминает анекдот "Уважаемые ученые! у меня в подвале что-то скребет. Что бы это могло быть?" . Задавайте вопрос более конкретно. 110.
(Модули Delphi в C Builder). Полный текст вопроса: [Отвечает: Feniks, 05.05.2005 11:08]: Да, можно, только это головная боль да и зачем, у С++Builder-а свои для этого есть компоненты, которые прекрасно с этим справляются. А вообще, в С++Builder встроен компилятор Delphi и он прекрасно компилит паскалевские юниты. Если посмотреть на сорцы всех библиотек С++Builder, то можно там увидеть и .pas файлы, которые компилятся постоянна вместе с Вашим проектом на С++Builder. Поэтому, если Вам нужен именно ProgressBar из библиотеки Delphi, то необходимо его выделить из библиотеки и сохранить в отдельный модуль, и уже этот модуль юзать на Билдере. Это если Вы хотите ProgressBar создавать динамически в Вашем проекте C++Builder-а. Если Вам необходимо его установить в IDE C++Builder-a как отдельный и независимы компонент, другими словами, просто перенести компонент ProgressBar с Delphi на C++Builder, тогда еще желательно переименовать класс ProgressBar в какой-нибудь другой, например, MyProgressBar, т.к. в C++Builder-е уже имеется такой класс и возникнет конфликт. 114.
(Компонент TVSNetTreeView). Полный текст вопроса: [Отвечает: Feniks, 05.05.2005 15:52]: //От ведущего: компонент отправлен задавшему вопрос. Скоро компонент появится на сайте. 99.
(Ассоциация файлов с приложением). Полный текст вопроса: [Отвечает: Feniks, 05.05.2005 17:47]: Вот Вам функция, которой я пользуюсь. Я ее запускаю при старте моего приложения. Она регистрирует указанное расширение (FileExt) на мое приложение. Ваша прога должна обрабатывать командную строку, что бы через параметры командной строки можно было ее передать имя Ваших файлов для открытия (см. в Хелпе фун-ции ParamStr, ParamCount). procedure CheckFileType(FileExt : String); begin 108.
(Импорт из TXT в БД). Полный текст вопроса: [Отвечает: Evgeshka Vasilkov, 11.05.2005 22:24]: Вначале читаем текстовый файл в tmemo а затем парсим его на нужные теги данных, которые и заносим в базу. Кусок программы, которая ищет в тексте строку "#3456" (index) и заносит в базу этот номер вместе с некоторыми другими данными: var Table1: TTable; 123.
(Отправка файла). Полный текст вопроса: [Отвечает: Evgeshka Vasilkov, 11.05.2005 22:20]:
Вспоминая свои древние поделки ещё на Паскале...
Вы также можете ответить на предыдущие вопросы. Поскольку на них уже ответили как минимум раз, они больше не публикуются в рассылке. Но если вы можете что-то добавить к ответам других, пожалуйста, отвечайте - ответы будут опубликованы. Найти предыдущие вопросы вы можете на нашем сайте: http://www.delphi-faq.fatal.ru/ или в спец-выпусках рассылки. |
||||||||||||||||||||||||||||||
В связи с переездом сайта статьи сегодня нет. Присылайте свои статьи по адресу delphi-faq@list.ru с темой 'Article' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки. Также вы можете заполнить вот эту форму. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). |
||||||||||||||||||||||||||||||
Из данного раздела Вы можете скачать различные файлы: компоненты, plug-in'ы для Delphi, документацию по программированию, программы, игры, написанные на Delphi и всё остальное... Вы можете добавить свои файлы в данный раздел, будем очень признательны! Чтобы сделать это, пожалуйста, заполните форму на сайте. Когда администратор ответит Вам и даст согласие на добавление файла(ов), тогда Вы их и пришлёте. Убедительная просьба соблюдать все вышеописанные правила.
|
||||||||||||||||||||||||||||||
Адрес раздела на сайте: http://www.delphi-faq.fatal.ru/modules.php?name=Friends. Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите наш баннер на своём сайте. Подробнее о том, как это сделать, можно прочитать на странице данного раздела на нашем сайте (ссылка дана чуть выше). Узнать о всех наших друзьях более подробно вы сможете на той же странице... http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом. http://www.basic.webhost.ru/ - Программирование на Basic & Visual Basic. На сайте Вы найдете множество примеров, статьи, исходники, ActiveX, а также многое другое! http://www.sashook.nm.ru/ - Игры, флешки, обои, компьютерные приколы. http://www.ssgroup.fatal.ru/ - Delphi 39. Ресурс для программистов. Статьи, исходники, компоненты, учебники, справочники, FAQ, программы и многое другое. Дружественные рассылки:
|
||||||||||||||||||||||||||||||
Ничего нет. Присылайте свои анекдоты по этой ссылке: 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 |
Отписаться |
В избранное | ||