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

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 877
от 24.07.2007, 12:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 466, Экспертов: 79
В номере:Вопросов: 5, Ответов: 15


Вопрос № 95542: Доброго времени суток. Помогите с проблемой (см.приложение): в мемо нужно вывести текущее время и строку, сформированную в процедуре, а выводится 2 раза время. Скорее всего я не корректно использую PChar и String, но что именно не так понять не могу....
Вопрос № 95576: Здравствуйте уважаемые эксперты. Нашел на сайте Delphi World алгоритм градиентной заливки (смотрите код в приложении) Но не знаю по чему (возможно из-за моей глупости или не внимательности) но если значение переменной h велико, то цвет всей ...
Вопрос № 95628: У меня тут такой вопрос, у меня вот тут прога и с помощью компонентов RobioButton, в ней меняется интерфейс проги,как можно зделать чтобы при закрытии проги сохранялись параметры нажатых кнопок RadioButton и CheckBox?...
Вопрос № 95640: Доброе время суток! Подскажите пожалуйста как решить такую проблему: необходимо чтобы программа считывала курсы валют. Заранее спасибо....
Вопрос № 95654: Здравстуйте, Эксперты! Пишу базу данных. С помощью закладки ВDE, пытаюсь отобразить на компоненте DBGrid данные из таблицы Акцесса, посредством TTable (закладка BDE). Для базы данных я задал алиас в в BDE Administrator - MyBase. Так в...

Вопрос № 95.542
Доброго времени суток. Помогите с проблемой (см.приложение): в мемо нужно вывести текущее время и строку, сформированную в процедуре, а выводится 2 раза время. Скорее всего я не корректно использую PChar и String, но что именно не так понять не могу.

Приложение:

Отправлен: 18.07.2007, 12:29
Вопрос задал: Игорь (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 12)

Отвечает: Stari
Здравствуйте, Игорь!
после запуска процы "vv" результат находиться в "mes" а она объявлена локально в процедуре. нужно результат присваивать глобальной переменной или использовать функцию.
а время вывести можно и по другому timetostr(time)

Пример:

Приложение:

Ответ отправил: Stari (статус: 1-ый класс)
Ответ отправлен: 18.07.2007, 12:53

Отвечает: Виктор Пырлик
Здравствуйте, Игорь!

Pchar – это указатель на символьный тип, предназначен для адаптации с типом *char (LPSTR и т.д.) языка С/С++. В частности, такое приведение (PChar(<строка>) необходимо для передачи строковых параметров в функции API Windows и другие функции, вызываемые из библиотек написанных на С/С++. Сам по себе указатель предполагает наличие инициализированной символьной переменной. Вы же пытаетесь очень «грубо» заставить на что-то его указывать – у меня работает ваша процедура с переменным успехом, либо «съедаются» последние символы, либо действительно повторяется дата – это результат того мусора, что лежит в стеке в контексте вызова метода OnClick. Мы работаем с памятью. Более корректно отработает ваша функция так:
s:='мама мыла раму';
mes:= PChar(s);

Но, для Pascal (Delphi) родной тип – String, символьный тип переменной длины. Работайте с ним, или более подробно изучите работу с памятью (указатели, ссылки).

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 18.07.2007, 13:43


Вопрос № 95.576
Здравствуйте уважаемые эксперты.
Нашел на сайте Delphi World алгоритм градиентной заливки (смотрите код в приложении)
Но не знаю по чему (возможно из-за моей глупости или не внимательности) но если значение переменной h велико, то цвет всей канвы становится одним. Проверьте пожалуйста, алгоритм на широких канвах. Возможно, у кого ни будь, есть другой алгоритм (только не намного сложнее этого)?

Приложение:

Отправлен: 18.07.2007, 16:49
Вопрос задал: Левадный Тимур Русланович (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Denisss

Здравствуйте, Левадный Тимур Русланович!

В целом, приведенный Вами код вообще не рабочий:
1. Функции RGB нужно передавать три параметра типа Byte, а передаются три параметра типа Extended (т.е. тут еще и функция округления требуется).
2. Процедура Rectangle(I,Y1,I+1,Y1) должна рисовать прямоугольник, высота которого = 0. В лучшем случае, это нарисует только линию, а не целый градиент (или же вовсе ничего не нарисует).

В общем, я несколько изменил данную функцию. Пример смотрите в приложении.

Разложение цветов на три составляющих и вычисление нового цвета я отдал функции RGBDiff, которая делает тоже, что и RGB(A1-(A1-B1)/h*i, A2-(A2-B2)/h*i, A3-(A3-B3)/h*i) из приведенного Вами примера. Только вместо A1-A3, B1-B3 ей требуется передавать два параметра TColor.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
----
Ответ отправлен: 18.07.2007, 18:34
Оценка за ответ: 5
Комментарий оценки:
Первый цвет работает не корректно (в отличии от второго)
пример: заменяю clBlue на clRed получаю clBlack.
В остальном все отлично, большое спасибо
не могли бы вы прокомментировать функцию RGBDiff

Отвечает: Маренич Владимир
Здравствуйте, Левадный Тимур Русланович!

Попробуйте поменять формулу:
RGB(A1-(A1-B1)*i div h, A2-(A2-B2)*i div h, A3-(A3-B3)*i div h)
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 19.07.2007, 11:38


Вопрос № 95.628
У меня тут такой вопрос, у меня вот тут прога и с помощью компонентов RobioButton, в ней меняется интерфейс проги,как можно зделать чтобы при закрытии проги сохранялись параметры нажатых кнопок RadioButton и CheckBox?
Отправлен: 19.07.2007, 04:21
Вопрос задал: Хакеров Алексей Андреевич (статус: Посетитель)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: UnRe@l
Здравствуйте, Хакеров Алексей Андреевич!
Самое простое – использовать INI-файл:

Unit IniFiles;
...
var
IniFile: TIniFile;
...
IniFile:=TIniFile.Create('myinifile.ini');
...
IniFile.WriteBool('CheckBox','1',True);

Считываем ReadBool.
---------
Cogito, ergo sum (c) R. Descartes (1596-1650)
Ответ отправил: UnRe@l (статус: 3-ий класс)
Ответ отправлен: 19.07.2007, 06:28

Отвечает: Omickron
Здравствуйте, Хакеров Алексей Андреевич!

Для того, чтобы запомнить параметры, нужно сохранить их в файл. Лучше всего для настроек использовать Ini файлы. (класс TIniFile)
Подключаем модуль TIniFiles, создаём объект класса и методами ReadBool, WriteBool считываем и записываем логические переменные (отмечены ли CheckBox и RadioButton)

Примеры работы с классом TIniFiles можно посмотреть в Help к Delphi.
Ответ отправил: Omickron (статус: 3-ий класс)
Ответ отправлен: 19.07.2007, 07:00

Отвечает: Yumark
Здравствуйте, Хакеров Алексей Андреевич!

Как вариант, можно сохранять в реестре:

http://delphiworld.narod.ru/base/reg_use.html
или
http://delphiworld.narod.ru/base/access_to_registry_with_api.html
Ответ отправил: Yumark (статус: 1-ый класс)
Ответ отправлен: 19.07.2007, 08:57

Отвечает: Stari
Здравствуйте, Хакеров Алексей Андреевич!
один из вариантов сохранять в ini файлы все параметры которые могут быть изменены.
Ответ отправил: Stari (статус: 1-ый класс)
Ответ отправлен: 19.07.2007, 11:49

Отвечает: Виктор Пырлик
Здравствуйте, Хакеров Алексей Андреевич!

Рабочий код в приложении.

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 19.07.2007, 12:08

Отвечает: Denisss
Здравствуйте, Хакеров Алексей Андреевич!

См. пример в приложении.

Небольшие разъяснения к примеру:

Поскольку я не любитель сохранения настроек в реестре (считаю это дурным тоном), то в примере все сохраняется в Ini файл.

FormCreate и FormClose вызывают две объявленные в классе функции: LoadSettings и SaveSettings, соответственно. Как можно догадаться, одна функция сохраняет настройки, другая загружает.
Данные функции сохраняют установки всех TRadioButton и TCheckBox, расположенных на форме Form1 в файл. При этом, форму можно переименовывать, можно добавлять и удалять элементы и т.д. Код будет работать в любом случае. Но если Вы удалите какой-либо элемент с формы, то желательно удалить его и из файла настроек.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
----
Ответ отправлен: 19.07.2007, 12:46

Отвечает: Дмитрий С.
Здравствуйте, Хакеров Алексей Андреевич!

Для экзаменаторов!!!! Дублирующий ответ, да плюс еще незнание русского языка. [= Gh0stik =]

Предлагаю записывать всё енто дело в .ini файл или в реестр
---------
Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 3-ий класс)
Ответ отправлен: 19.07.2007, 13:37


Вопрос № 95.640
Доброе время суток! Подскажите пожалуйста как решить такую проблему: необходимо чтобы программа считывала курсы валют. Заранее спасибо.
Отправлен: 19.07.2007, 08:34
Вопрос задал: Vlad Cepesh (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Coupler
Здравствуйте, Домикальчиков Владимир Юрьевич!
Для этого можно, например, загрузить страницу какого-нибудь сайта, в которой показываются курсы валют, и получить их со страницы. В примере информация берется с http://www.rbc.ru/ (документ http://www.rbc.ru/out/802.csv) - в нем отображаются курсы валют и множество другой информации. Пример взят с http://www.delphisources.ru/ скачать пример (13кб). Также пример лежит в приложении.

Приложение:

Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 19.07.2007, 08:52
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное! Попробовал - работает!


Вопрос № 95.654
Здравстуйте, Эксперты!
Пишу базу данных.
С помощью закладки ВDE, пытаюсь отобразить на компоненте DBGrid данные из таблицы Акцесса, посредством TTable (закладка BDE).
Для базы данных я задал алиас в в BDE Administrator - MyBase.
Так вот:
Связь задана с помощью TDATASourse, а при задании имени таблицы в TTable у меня программа требует имя пользователя и пароль.
PS База данных локальная, и никаким паролем не запаролена!!!
Вопрос:
В чем тут дело и можно ли снять эти ограничения?
Отправлен: 19.07.2007, 10:59
Вопрос задал: Герасименко Алексей Анатольевич (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Виктор Пырлик
Здравствуйте, Герасименко Алексей Анатольевич!

Пользователь (логин) для Access: Admin
Пароль : пустой

Для корректной работы с MS Access рекомендуется использовать компоненты со страницы ADO.
1. BDE использует доступ ODBC

2. Работа через BDE ограничивает распространение приложения дополнительной
привязкой к собственным драйверам (надо будет инсталлировать и BDE)

3. Нет ни какой уверенности, что «завтра» ваше приложение посредством BDE
сможет работать с базой новой Access (новыми драйверами). Borland уже давно
не сопровождает BDE.

4. При использовании ADO появляются дополнительные возможности при работе с
данными, и облегчается программирование.

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 19.07.2007, 12:42

Отвечает: Delph
Здравствуйте, Герасименко Алексей Анатольевич!

В компоненте Database (аналог в ADO: ADOConnection) есть свойство LoginPrompt. Его нужно выставить в False. Это подавит форму, запрашивающую логин и пароль. Свойство LoginPrompt я привык сбрасывать в испекторе объектов - так проще всего.
Ответ отправил: Delph (статус: 4-ый класс)
Ответ отправлен: 19.07.2007, 13:01

Отвечает: Djec
Здравствуйте, Герасименко Алексей Анатольевич!
Для работы с Аксесс необходимо работать с компонентами из закладки ADO. Сначала ставим TADOConection. Теперь настройте соединение с сервером, которое должно быть прописано в свойстве ConnectionString. Для этого надо дважды щёлкнуть по строке ConnectionString. В открывшемся окне выберите Use Connection String и нажмите кнопку Build. На закладке Provider выберите Microsoft Jet 4.0 OLE DB Provider. После этого нажмите кнопку Next. В появившемся окне надо ввести имя (если надо то и путь) базы данных в строку «Select or enter a database name». Если база данных будет располагаться в той же директории, что и запускной файл, то путь указывать не надо.
Поле User name можно оставить по умолчанию, если не заданно иное при создании базы;
Поле Password – если база имеет пароль, то его необходимо указать;
Поле Blank password – если пароль не нужен, то здесь желательно поставить галочку;
Поле Allow saving password. Если здесь поставить галочку, то пароль может быть сохранён.
Для проверки соединения нажмите кнопку Test Connection. Если удачно, появится сообщение Test connection succeeded. Теперь закрывайте.
В свойствах компонента ADOConnection отключите свойство LoginPrompt, выставив его в False. Это нужно для того, чтобы при каждом обращении к базе не выскакивало окно ввода пароля. А теперь выставте свойство Connected в True, чтобы произошло соединение с базой.
Далее выбирайте из закладки ADO компоненту TADOTABLE. В свойстве ConnectionString указываем наше ADOConnection1. Active выставите в True.
А с компонентой TDATASourse стандартные операции.

---------
Никогда не сдавайся, даже если боишься проиграть
Ответ отправил: Djec (статус: 2-ой класс)
Ответ отправлен: 19.07.2007, 13:21


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное