Уважаемые эксперты! Еще раз к вопросу о том, можно ли сделать дочернюю форму модальной. Поясняю, для чего это было нужно. Есть две дочерние формы, одна для ввода данных о лице, другая о документе. Есть возможность установить связь документа с лицом (связь типа "владелец документа"), но для этого надо вызвать первую форму, чтобы пользователь нашел в базе лицо и выбрал его. Естественно, для того, чтобы подождать выбора лица, форма должна быть модальной. Но модальной ее сделать не выходит, т.к. она дочерняя. К тому же я не хочу ссылаться на дочерние формы друг из друга, а только чтобы главная их "знала". Сейчас я сделала это следующим способом. При выборе лица из формы лица перед ее закрытием посылаю юзерское сообщение (SendMessage) главной форме, та перекидывает данные о лице в свою промежуточную переменную - член класса формы. Потом
главная форма посылает сообщение форме документа, та берет данные из главной формы и использует по назначению... Вопрос вот в чем: может, я правой рукой левое ухо чешу? :-)))) Можно ли было сделать это красивее?
Здравствуйте, L_Dorrit! > может, я правой рукой левое ухо чешу? Знаешь, а это вполне удобно ... И наоборот тоже ничего получается... Мне кажется, что раз у тебя стоит такая задача, то форма выбора лица из БД не должна быть MDIChild - сделай ее простой формой и выводи модально (при этом еще будет приятней, если ты уберешь ее из списка auto-create и будешь создавать руками). При этом, в твоей процедуре ты сначала создаешь и модально показываешь форму выбора лица, после чего создаешь нового MDIChild для соответствующего документа (можно в заголовок написать: документ ... владельца ... или что-то related). > Сейчас я сделала это ... посылаю юзерское сообщение (SendMessage) неплохо :)
* EMan1.4: ---===*** Have your friend the way you would like him ... never mind, do anything that comes natural ***===---
Ответ отправлен: 15.07.2003, 19:53 Отправитель: Bob Johnson
Вопрос № 784
Здравствуйте, глубокоуважаемые эксперты. 1) А реально ли вообще сделать следующее: при вызове нужной формы закрывать TTable и открывать TQuery, для написания чистого SQL-кода ??? 2) На форме находитья 6 редакторов TEdit. При нажатии на кнопку "Блокировать" они должны стать неактивными. Я пишу так: (Sender as TEdit).Enabled:=False; но выдается ишибка "Invalid class typecast". Что я делаю неправильно ??? 3) Ну и совсем ламерский вопрос: что такое ODBС ??? Все что я смог найти по этому поводу, так это то что какие-то драйвера и это как-то связано с базами данных.
Здравствуйте, SATAN aka NAPALM! 1. А почему нет? 2. В обработчике нажатия кнопки "Бл" sender представляет собой не TEdit, а TButton (угадай какую!). Тебе нужно писать, например, так: Edit1.Enabled := false; Edit2.Enabled := false; ... Edit6.Enabled := false; 3. Open DataBase Connectivity: открытый интерфейс доступа к базам данных, встроенный в Windows и Windows NT, определяет набор функций, которые можно использовать для доступа к любой реляционной СУБД (ABBYY Lingvo).
* EMan1.4: ---===*** Have your friend the way you would like him ... never mind, do anything that comes natural ***===---
Ответ отправлен: 15.07.2003, 19:53 Отправитель: Bob Johnson Отвечает baldr
Доброе время суток, SATAN aka NAPALM! 1. Реально. 2. Скорее всего, Sender будет сама форма - чтобы выключить сами контролы, так и пиши - Edit1.Enabled:=False; Edit2:= ... 3. Это действительно набор драйверов для работы с БД. Универсальные драйвера. Идут с виндой. По умолчанию ставятся не все. BDE работает через ODBC, а вот про остальные не уверен. Ответ отправлен: 15.07.2003, 16:03 Отправитель: baldr Отвечает ART_43
Здравствуйте, SATAN aka NAPALM! 1)Реально 2)Значит Sender не является TEdit, возможно ты это используешь в OnClick у Button, тогда Sender будет TButton, или у тебя не TEdit а TDBEdit и вообще лучше поставить проверку "if Sender is TEdit then ..." 3)Набор драйверов доступа к базам данных, которые(драйвера) работают по единому интерфейсу и с их помощью пожно подключиться и к простому DBase III и к MS SQL Server, причем работа и стем и с другим, не будет пренципиально отражаться Ответ отправлен: 15.07.2003, 17:42 Отправитель: ART_43 Отвечает URiS
Добрый день, SATAN aka NAPALM! 2) Да, но Sender в этот момент - есть кнопка! Придётся так Edit1.Enabled:=false; Edit2Enabled:=false; ...
Ответ отправлен: 17.07.2003, 14:05 Отправитель: URiS
Вопрос № 785
Я этот вопрос давно задавал... может у кого появились соображения:) Как в игре под DelphiX (в принципе это без разницы) создать такие часики, чтобы на мощном и тормозном компе было допустим не более 60 FPS... сколько я не бился с помощью встроеного таймера коряво получается... на можном компе вырываются эти FPS вперед... пробывал с помощью (см. прил.) то же стабильно >100 FPS... подскажите кто знает...
Доброе время суток, Ландграф Павел! Ну во-первых чем тебя не устраивает больше 60 fps? Ты главное смотри за временем каждого кадра, а сколько их будет - не важно. Если же все-таки хочешь, то делай так. Если тебе надо 60 fps, значит между кадрами должно быть около 16,67 мс. Теперь ты делаешь так - запоминаешь текущее время (например, QueryPerformanceCounter), выводишь очередной кадр на экран, далее делаешь такой цикл:
repeat QueryPC (&t); if (t - begt >= threshold) then break; Sleep (0); until false;
Это даст задержку в 1/60 секунды до начала вывода следующего кадра. Но имей ввиду, что процессор при этом будет полностью загружен (чтобы не был - поставь sleep (1), но тогда точность сильно упадет).
* EMan1.4: ---===*** Have your friend the way you would like him ... never mind, do anything that comes natural
***===---
Ответ отправлен: 17.07.2003, 01:33 Отправитель: Bob Johnson Отвечает URiS
Приветствую Вас, Ландграф Павел! А разве нельзя поставить Interval таймера равный 1000/60=16?!
Ответ отправлен: 17.07.2003, 14:05 Отправитель: URiS
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.