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

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


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

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

Выпуск № 640
от 04.11.2006, 10:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 401, Экспертов: 65
В номере:Вопросов: 6, Ответов: 12


Вопрос № 60534: Здравстуйте Уважаемые експерты! У меня необычный вопрос: Как в программе создать среду разработки, наподобие конфигуратора 1С или что-то подобное. Подскажите в каком направлении двигаться, что почитать или посмотреть. Спасибо!...
Вопрос № 60607: Уважаемые эксперты. Как передать параметр функции, вызываемой процедурой win-api SetTimer? Или как можно динамически создать таймер-поле класса, вызывающий в событии OnTimer другой метод того же класса? Если можно, наглядным примером. Заранее спа...
Вопрос № 60617: Здраствуйте! Есть база данных sql, подскажите новичку...как вывести данные на экран (т.е. с помощью какого компонента лучше вывести). Чтобы выглядело все как таблица...причем она длинная и на экран вся не поместится - должна быть прокрутка. Под т...
Вопрос № 60618: здравствуйте, уважаемые эксперты. вот есть простая процедура-обработчик нажатия кнопочки: procedure TForm1.SpeedButton1Click(Sender: TObject); var xx:real; begin xx:=49.001; if xx =49.001 then showmessage ('AA...
Вопрос № 60633: Здравствуйте! В SocetConnection есть свойство порт, а в DCOMConnection нет такого свойства. Как работать с портами в DCOMConnection? И ещё один вопрос который почемуто не попал к экспертам. Что Вы скажите уважаемые эксперты по поводу...
Вопрос № 60642: Здравствуйте, ув. эксперты. Скажите, как работать с компонентом TTabControl. Как располагать компоненты на разных вкладках, где об этом можно почитать? Подскажите, где вообще можно найти описание компонентов?...

Вопрос № 60.534
Здравстуйте Уважаемые експерты! У меня необычный вопрос: Как в программе создать среду разработки, наподобие конфигуратора 1С или что-то подобное. Подскажите в каком направлении двигаться, что почитать или посмотреть. Спасибо!
Отправлен: 29.10.2006, 09:57
Вопрос задал: Viktor_sh (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PaVeL_Ekt
Здравствуйте, Viktor_sh!

Вам придется динамически создавать форму, и все компоненты, описание которых будут храниться в каком-нибудь файле или базе данных.

динамически можно создавать через WinAPI,
Можно самому попотеть, и сделать прорисовку форм, и обработку событий
(долго и муторно но можно) но файл описаний в любом случае будет !!!
также могу посоветовать все элементы формы при загрузке программы загружать в динамический массив (например:
VAR BTNDINAMICAL: array of TButton;)


---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 5-ый класс)
Ответ отправлен: 30.10.2006, 09:13


Вопрос № 60.607
Уважаемые эксперты. Как передать параметр функции, вызываемой процедурой win-api SetTimer? Или как можно динамически создать таймер-поле класса, вызывающий в событии OnTimer другой метод того же класса? Если можно, наглядным примером.
Заранее спасибо!
Отправлен: 29.10.2006, 22:21
Вопрос задал: =FeanaR= (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Melamed
Здравствуйте, =FeanaR=!

Лучше создавай динамический таймер, а еще лучше используй комонент Timer, предварительно выставив его свойство Enable в значение False. Этим ты отключишь таймер. А когда тебе надо б ;удет запустиь таймер, ты только установишь это своство в значение True и все

Ответ отправил: Melamed (статус: 7-ой класс)
Ответ отправлен: 30.10.2006, 00:30


Вопрос № 60.617
Здраствуйте!
Есть база данных sql, подскажите новичку...как вывести данные на экран (т.е. с помощью какого компонента лучше вывести). Чтобы выглядело все как таблица...причем она длинная и на экран вся не поместится - должна быть прокрутка. Под таблицей я понимаю расчерченную область - ячейки. Далее еще предполагается использовать выбирать необходимые данные из этой таблица нажатием мыши. Кто что может подсказать по этому поводу.
Отправлен: 30.10.2006, 00:06
Вопрос задала: Артемова Марина (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Артемова Марина!
В Дельфи для этого есть специальный компонент - DBGrid. Это именно расчерченая область - ячейки, заголовки...
Только есть одна неувязочка. База данных - это не таблица, а набор таблиц. Поэтому к базе данных необходимо составить запрос в котором указать - какие поля и из каких таблиц Вы хотите видеть в своей сетке. Кроме того может так случится, что в таблицы базы данных будут накидано столько всевозможных данных, что пользователь будет с утра до вечера крутить прокрутку, но то, что ему нужно не найдет. Или уснет в процессе поиска. Поэтому в запрос необходимо будет добавить условия отбора данных, чтобы туда попали именно те данные, которые нужны пользователю.
Потом тоже неувязочка начнет просматриваться - а куда же этот самый запрос запихать, как его оформить? Не знаю. Компонентов для доступа к базам данных куча и какой выбрать - зависит от того, какой тип сервера баз данных у Вас установлен.
Вам срочно необходимо, не медля ни секунды, купить какую-нибудь книгу по работе с базами данных в Дельфи.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 30.10.2006, 04:49

Отвечает: PaVeL_Ekt
Здравствуйте, Артемова Марина!

возмите компонент Query с панели BDE проришите запрос к БД!
настройте Databasename
приткните на форму DATASource с панели Data Access
в свойстве dataset выберите query1
вставьте на форму dbGrid панель Data Control
в свойстве DataSource выберите DataSource1
в кнопку вставьте такой код:
query1.ExecSQL;
компилируйте и жмите на кнопку, все появиться

---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 5-ый класс)
Ответ отправлен: 30.10.2006, 08:54

Отвечает: Jadd
Здравствуйте, Артемова Марина!
К вышесказанному попробую добавить пару вариантов.
Из компонентов для управления данными из таблиц проще всего использовать BDE и компонент TTable и TDataSource. В БДЕ надо создать псевдоним (alias), который бы ссылался на Вашу БАЗУ. Далее. На форму кидаем TTable и в поле DatabaseName выбираем Ваш псевдоним. TableName - выбираем имя Вашей таблицы. Active устанавливаем в true. Дальше. На форму кидаем TDataSource. Свойство DataSet - выбираем TTable, который только что настроили. Затем соединяем DBGrid с DataSource и получаем данные из таблицы на экране :)

Другой способ - использовать ADO. Настройки примерно те же, но там еще компонент добавится TADOConnection.

Какой из этих способов выбирать зависит даже не от сервера баз данных, а от того, какие задачи Вы ставите. Например, будет ли программа переноситься с компьютера на компьютер(тогда лючше ADO, чтобы не таскать весь BDE)? Ну и тп.

Успехов, пишите, если возникнут трудности или вопросы.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 30.10.2006, 08:56


Вопрос № 60.618
здравствуйте, уважаемые эксперты.
вот есть простая процедура-обработчик нажатия кнопочки:

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
xx:real;
begin
xx:=49.001;
if xx =49.001 then
showmessage ('AAAAAAAAAA' );
end;

так вот вопрос в том, что я не пойму, ПОЧЕМУ программа при прохождении этой процедуры не выдает сообщения? я прохожу ее троссировкой, вижу, что xx имеет значение 49.001, но при этом не выполняется if !!!!! я не могу уже. нервы уже не выдерживают. вообще-то конечно проблема заключается не конкретно в этом коде. просто путем долгого поиска я вышел на подобную проблему в сложной программе.
чем можете помочь?
Спасибо.
Отправлен: 30.10.2006, 00:25
Вопрос задал: Lichkaty (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: DeVampir
Здравствуйте, Lichkaty!
Думаю, дело в том, что просто так нельзя сравнивать между собой вещественные числа. Попробуйте в if вместо равенства писать так abs(xx - 49.001) <= 0.0001. Здесь 0.0001 - требуемая точность.
Удачи!!!
---------
Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 3-ий класс)
Ответ отправлен: 30.10.2006, 03:04

Отвечает: sir henry
Здравствуйте, Lichkaty!
Проблема в системе хранения чисел с плавающей запятой. У них всегда есть погрешности, которые не позволяют проводить точное сравнение.
Возможные решения:
1. Если у Вас количество знаков после запятой не превышает четырех, то пользуйтесь типом Cardinal. Несмотря на то, что там есть запятая - это целочисленный тип, позволяющий проводить точное сравнение. Этот тип добавили специально по просьбе бухгалтеров, у которых с вещественными типа беспрерывно терялись копейки (центы, пенсы и т.п.), за что им постоянно мылили шею. :)
2. Переводите перед сравнением вещественный тип в форматированную строку, где будут указаны точное кол-во знаков после запятой, например с помощью Format(). Тогда по = будут сравниваться две строки на эквивалентность, а здесь уже можно провести точное сравнение, т.к. код каждого символа - целочисленный тип.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 30.10.2006, 05:07

Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Lichkaty!
Попробуйте вместо типа real использовать extended
---------
Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как
Ответ отправил: Кулаков Антон Сергеевич /SandroNec (статус: 2-ой класс)
Ответ отправлен: 30.10.2006, 06:19

Отвечает: PaVeL_Ekt
Здравствуйте, Lichkaty!

Попробуй такую фишку:

var xx:real;
Begin
xx:=49.002;
if CompareValue(xx,49.001)=0 then
showmessage ('AAAAAAAAAA' );
end;

Только в USES обязательно припиши MATH, и все в ажуре будет,
но если это не подходит, есть функция (не помню как называется) которая извлекает из дробного числа все, что правее запятой

о вспомнил, Frac тогда можно проверять целое число и проверять дробную часть, но только она возвращает тоже реал (frac(49,005) вернет 0,005), так-что лучше через компаре
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 5-ый класс)
Ответ отправлен: 30.10.2006, 08:41


Вопрос № 60.633
Здравствуйте!
В SocetConnection есть свойство порт, а в DCOMConnection нет такого свойства. Как работать с портами в DCOMConnection?

И ещё один вопрос который почемуто не попал к экспертам.
Что Вы скажите уважаемые эксперты по поводу вот этой статьи:
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=773 ?
Т.е. какие ошибки в этой статье, как можно улучшить проект представленный в данной статье?
Отправлен: 30.10.2006, 06:58
Вопрос задал: KuchumHan (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: PaVeL_Ekt
Здравствуйте, KuchumHan!

DComConnection, насколько я понял, полистав хелп делфы, работает через COM + или MTS у которых впринципе являеться частью финды, а по сему я предпологаю, что порт для этих соединений забиндин самой системой !!!

ClientConnection идентифицирует машину по IP, а значит и порт приложения необходим !!! это сделано насколько я понял для поддержи множественных серверов, чтобы менять сервер во время работы.

Пример впринципе простой, и не сложный, и ошибок как бы я не заметил, но для каких-либо крупных задачь может задуматься об использовании SQL (Oracle), тем более, что компанентов для этих целей предостаточно !!!

Приложение:

---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL

Ответ отправил: PaVeL_Ekt (статус: 5-ый класс)
Ответ отправлен: 30.10.2006, 08:15


Вопрос № 60.642
Здравствуйте, ув. эксперты. Скажите, как работать с компонентом TTabControl. Как располагать компоненты на разных вкладках, где об этом можно почитать? Подскажите, где вообще можно найти описание компонентов?
Отправлен: 30.10.2006, 09:00
Вопрос задал: dobroman (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Monah
Здравствуйте, dobroman!
О данном компоненте неплохо написано в книге Бобровского "DElphi 7". Основная работа происходит через его свойство Tabs - которое хранит колекцию вкладок. При разработке можно заполнить дочерними компонентами только Tabs[0], в runtime возможно полное управление вкладками, (создание, удаление) перерисовка. При этом учтте, что при переключении вкладок их содержимое само не меняется и соответствеут содержимому первой вкладки tabs[0]. Если же вам надо чтобы содержимое менялось динамически, используйте компонент PageControl.
Ответ отправил: Monah (статус: 6-ой класс)
Ответ отправлен: 30.10.2006, 09:12

Отвечает: PaVeL_Ekt
Здравствуйте, dobroman!

Через поисковики инета !!!
Делфиворлд (DelphiWorld)
Королевство делфи и т.д.

а по таб контролу могу сказать следующее,
если на разных вкладках будут разные компоненты, то может имеет смысл поставить PageControl т.к. там можно создавать страницы, а TabControl создает только закладки, а потому в табконтроле компоненты будут одни и теже на всех закладках, а пайдж контрол он для каждой закладки использует панель, потому на каждой странице пейджа будет свой набор компонент !!! Выбирай, что нравится.

УДАЧИ
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 5-ый класс)
Ответ отправлен: 30.10.2006, 10:14


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное