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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 332
от 22.12.2005, 19:48

Администратор:Калашников О.А.
В рассылке:Подписчиков: 240, Экспертов: 50
В номере:Вопросов: 9, Ответов: 22


Вопрос № 31640: Здраствуйте уважаемые эксперты. У меня такой вопрос, как зделать чтобы caption формы медленно двигалось с права на лево, если вся надпись невмещается, примарно так как в разных плеерах. Заранее спасибо....
Вопрос № 31655: Уважаемые эксперты! Не подскажите как сделать hint подсказку при наведении курсора мыши к слову в memo. На пример как это реализовано в delphi, при наведении курсора на слово появляется подсказка, что это за фунция, процедура или т.д....
Вопрос № 31656: Немогли бы вы подсказать как грамотно создать связь баз данных один-ко-многим. Либо если есть возможность дайте ссылку на данный материал в интернете. Заранее благодарю....
Вопрос № 31659: Доброго времени суток! Я повторю свой вопрос. Возможно он умер до того, как его все прочитали. Просто очень нужен ответ. Как осуществить захват содержимого экрана во время работы DOS-приложения в полноэкранном режиме. И как из программы определить в ...
Вопрос № 31662: Как при работающей системе скопировать файлы реестра? ...
Вопрос № 31663: Как написать программу которая выполнялась бы до загрузки Windows?...
Вопрос № 31670: Здравствуйте уважаемые эксперты! Как можно в моей программе создавать собственные exe файлы?...
Вопрос № 31675: Драсти всем! Недавно начал работать с БД в делфи. Появилось 2 вопроса: 1. Как связать 2 и более таблиц без компонента Table (все делаю с помощью Query и SQL запросов) ? 2. Как можно сохранить/загрузить дерево данных в табли...
Вопрос № 31681: Спасибо за ответы. Теперь надо немного пояснить вопрос. Всем известно что Windows не позволяет выполнять некоторые действия. Т.е. надо эти действия выполнять до того как эта Windows полностью загрузится. Приложение под DOS написать не проблема и пото...

Вопрос № 31.640
Здраствуйте уважаемые эксперты.
У меня такой вопрос, как зделать чтобы caption формы медленно двигалось с права на лево, если вся надпись невмещается, примарно так как в разных плеерах.
Заранее спасибо.
Отправлен: 16.12.2005, 21:42
Вопрос задал: Станислав (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Romodos
Здравствуйте, Станислав!
Я делал так когда-то. Идея должна быть понятна. Пример в приложении.
Кладёте на форму Timer, устанавливаете интервал примерно в 200-2000.
И в событии OnTimer сдвигаете caption на один. Определите, сколько у вас влезает символов в caption и занесите это значение в len

Приложение:

---------
FAQ me off!

Ответ отправил: Romodos (статус: Студент)
Отправлен: 16.12.2005, 22:10
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Станислав!
Это надо самостоятельно перерисовывать Caption формы.
Если не лезть в муть WinAPI, то самый простой способ для этого бросить на форму таймер, определить интервал через который будет менятся Caption, создать массив с разными видами заголовка окна, типа
mas[0]:='Заголов';
mas[1]:='аголово';
mas[2]:='головок';
Я думаю, глядя на масссив идея Вам понятна. будете просто периодически менять название заголовка в событии таймера OnTimer и все. Это конечно не движение, но похоже. :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.12.2005, 06:22
Оценка за ответ: 4

Отвечает: Ujin Antikvar
Здравствуйте, Станислав!

Вот простой пример такой строки.

procedure TForm1.Timer1Timer(Sender: TObject);
var s:string;
c:char;
begin
s:=Form1.Caption;
c:=s[1];
delete(s,1,1);
Form1.Caption:=s+c;
end;

С помошью Interval'a Timer'a можете регулировать с какой скоростью она будет двигаться.
---------
"Будущее принадлежит тем, кто верен своей мечте" - Элеонора Рузвельт
Ответ отправил: Ujin Antikvar (статус: 4-ый класс)
Отправлен: 17.12.2005, 08:52

Отвечает: Vbhjndjhtw
Здравствуйте, Станислав!
По сути это бегущая строка. Объяснать долго вот исходник с коментариями.

Приложение:

Ответ отправил: Vbhjndjhtw (статус: 7-ой класс)
Отправлен: 17.12.2005, 09:11


Вопрос № 31.655
Уважаемые эксперты!
Не подскажите как сделать hint подсказку при наведении курсора мыши к слову в memo. На пример как это реализовано в delphi, при наведении курсора на слово появляется подсказка, что это за фунция, процедура или т.д.
Отправлен: 17.12.2005, 12:07
Вопрос задал: Yxo (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Yxo!
Это свойство компонента. Оно так и называется - Hint. В него заносите краткий текст - описание или требуемое действие, например:
Memo1.Hint:='Напиши сюда что-нибудь, чувак!';
Чтобы подсказка заработала надо сделать свойство ShowHint:=True.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.12.2005, 12:20
Оценка за ответ: 1
Комментарий оценки:
Извините, но вы ответили не на мой вопрос. Мой звучал как "как сделать hint подсказку при наведении курсора мыши К СЛОВУ в memo", т.е. К ОПРЕДЕЛЕННОМУ СЛОВУ в мемо, а не на само мемо.

Отвечает: Vbhjndjhtw
Здравствуйте, Yxo!
В свойствах(Properties) TMemo нажимаешь hint, пишешь туда текст своей всплывающей подсказки или посредством кнопки Load загружаешь текст.
Потом в тех же свойствах ищешь Show hint, выбираешь true. Запускаешь своё приложение, наводишь мышь на объкт и должна всплыть подсказка.
Можно сделать так:
{какое-либо событие}
myform1.mymemo.ShowHint:=true;

или
if i:=0
then myform1.mymemo.ShowHint:=true
else myform1.mymemo.ShowHint:=false;
P.S.Немного, но соответственно вопросу.








Ответ отправил: Vbhjndjhtw (статус: 7-ой класс)
Отправлен: 17.12.2005, 12:29
Оценка за ответ: 1
Комментарий оценки:
Извините, но вы ответили не на мой вопрос. Мой звучал как "как сделать hint подсказку при наведении курсора мыши К СЛОВУ в memo", а не на само мемо.

Отвечает: nimoid
Здравствуйте, Yxo!

Стандартной ф-ции такой нет. Возможно надо копать в сторону API и посмотри например исходники компонента RxRichEdit , там вроде что-то наподобие реализовано...

Я думаю алгоритм такой - надо определить слово которое находится под курсором, изменить хинт на нужный и показать этот хинт.
---------
Перед тем как задать вопрос, поищи сначала сам ответ. Яндекс в руки и вперед... )
Ответ отправил: nimoid (статус: 6-ой класс)
Отправлен: 17.12.2005, 14:06
Оценка за ответ: 4
Комментарий оценки:
Будем искать :)


Вопрос № 31.656
Немогли бы вы подсказать как грамотно создать связь баз данных один-ко-многим. Либо если есть возможность дайте ссылку на данный материал в интернете.
Заранее благодарю.
Отправлен: 17.12.2005, 12:56
Вопрос задал: Afini (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Jadd
Здравствуйте, Afini!
Допустим, есть две таблицы: Courses и Students. Первая содержит ключевое поле ID, содержащее уникальный идентификатор курса. Вторая - данные студента и поле CourseID, содержащее ID курса. Таким образом, получается зависимость Мастер->Подчиненный (или один ко многим). В самой дельфи мы кидаем две TTable и, как минимум, один TDataSource. Теперь их связываем. 1-й TTable (назовем его tblCourse) в поле Table будет содержать название таблицы Cource, а второй TTable (назовем его tblStudents) в том же поле содержит students. Дальше TDataSource связываем с tblCourse. Теперь в tblStudents в поле MasterSource пишем DataSource1 (датасорс tblCourse), а в MasterFields связываем поле ID из Course с CourseID из Students. После установки в true свойства Active обоих ttable приведет к их связыванию, а перемещение по записям tblCourse, к обновлению рекордсета в tblStudents. Увидеть все это можно, если кинуть на форму два TDBGrid и связать их с обоими TTable. Удачи.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 17.12.2005, 13:14

Отвечает: sir henry
Здравствуйте, Afini!
Покажу на примере. Пусть у Вас есть справочник товаров с полями "№" и "Название":
1 Масло
2 Сахар
3 Макароны
Пускай у Вас есть таблица продаж этих продуктов с полями "№продукта". "Количество", "ДатаПродажи". В этой таблице названия продуктов не прописываются, а только ставится их номер, т.е. 1, 2 или 3. Один и тот же продукт (по названию) продается несколько дней, пока он есть на складе. Следовательно в таблице продаж будет несколько записей относящихся, например, к сахару:
2 41 15.12.2005
2 30 16.12.2005
2 45 17.12.2005
Вот отношение справочника (одно название с номером) к таблице продаж (несколько номеров одного товара) и есть отношение "один ко многим".
Определяется отношение таблиц: одна таблица главная (мастер-таблица) другая подчиненная. В данном случае главная - справочник, подчиненная - таблица продаж.
Отношения между ними задаются в компоненте TTable:
- MasterSource - Здесь задается имя главной таблицы;
- MasterFields - Здесь из списка полей выбирается поле главной таблици и соответствующее ей поле подчиненной таблицы. В данном случае выбираются поля "№" и "№продукта".
И в той и в другой таблице по выбраным полям должны существовать индексы, иначе связь работать не будет.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.12.2005, 14:04


Вопрос № 31.659
Доброго времени суток! Я повторю свой вопрос. Возможно он умер до того, как его все прочитали. Просто очень нужен ответ. Как осуществить захват содержимого экрана во время работы DOS-приложения в полноэкранном режиме. И как из программы определить в каком режиме работает Виндоус: в обыкновенном графическом или полноэкранном DOS.
P.S. Кстати спасибо sir henry за ответ на 30994 вопрос. Это здорово облегчило мой экзэшник. Жаль вопрос был не мой.
Отправлен: 17.12.2005, 13:46
Вопрос задал: Sokol (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, Sokol!
Скорее всего никто не знает. Дело в том, что принцип работы экрана в полноэкранном досовском режиме и в любом другом принципиально отличаются. Не знаю Ваш стаж программирования, но раньше существовало несколько режимов работы: с 0 по 3 - чисто текстовый (оперирующие знакоместом экрана), а все остальные - графический (оперирующие точкой экрана). Отсюда, сами понимаете, ответа на Ваш вопрос не будет, кроме как поместить в массив символы и цвета символов, а потом их воспроизвести через цикл.
Как определить полноэкранный режим? Официально - никак. :) Однажды я выкопал пару недокументированых функций - GetConsoleDisplayMode(lpdwMode) и SetConsoleDisplayMode(). Первая функция определяет есть ли полноэкранный режим. Проверьте, какие значения она возвращает в полноэкранном и в неполноэкранном режиме. Эти функции работали в WinNT, но не факт, что работает и дальше. :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.12.2005, 14:45
Оценка за ответ: 4
Комментарий оценки:
Спасибо. Половина проблемы возможно снимется. В ДОС-окне хорошо работает кнопка PrintScreen. Содержимое окна в текстовом виде заносится в буфер. Буду исследовать этот вопрос.


Вопрос № 31.662
Как при работающей системе скопировать файлы реестра?
Отправлен: 17.12.2005, 14:33
Вопрос задал: REFERI (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: nimoid
Здравствуйте, REFERI!

Если я правильно понял про что ты говоришь...

Файл реестра (в NT) - SAM (База данных Security Account Manager), а также другие файлы, находятся в %SystemRoot%system32config - к ним доступ закрыт.

В %SystemRoot% epair хранятся их копии. Вот их и можешь копирнуть.

Ну и.. наверно можно сделать програмно экспорт реестра в файл, если тебе это надо (см. доки по работе с реестром).

p.s. Не знаю как обстоят дела с сервис паками, возможно после них к резервным копиям доступ закрыт (не проверял).
---------
Перед тем как задать вопрос, поищи сначала сам ответ. Яндекс в руки и вперед... )
Ответ отправил: nimoid (статус: 6-ой класс)
Отправлен: 17.12.2005, 16:22
Оценка за ответ: 4
Комментарий оценки:
Не пойдет - сильно отличаются они...
А сохраняются в repair только помоему при создании контрольной точки.


Вопрос № 31.663
Как написать программу которая выполнялась бы до загрузки Windows?
Отправлен: 17.12.2005, 14:33
Вопрос задал: REFERI (статус: Студент)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Здравствуйте, REFERI !
Не совсем понимаю, о чём речь. DOS-приложение - можно (Console application), а до загрузки Windows ничего и не запускается, разве что загрузочная заставка (ntoskrnl.exe) и страница логона (logonui.exe). В это время никакие программы/процессы ещё не запущены. Учитывая, что вы эксперт и притом неплохо уровня, искренее надеюсь, что это не вопрос а-ля "программа, работающая при выключенном компьютере". Напишите, пожалуйста, что именно вы подразумеваете.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 17.12.2005, 14:41

Отвечает: nimoid
Здравствуйте, REFERI!

Рассмотрим загрузку (упрощенно!):

1. Загружается биос, идет поиск с чего грузить (сидюк, флоппи, винт).
2. Читается загрузочный сектор "с чего грузить".
3. Запускается загрузчик (loader), который прописан в загрузочном секторе.
4. Загрузчик грузит ОС.
5. ОС запускает сервисы, программы.

Исходя из вышеперечисленного, делаем вывод: писать свой загрузчик, который является одновременно и "программу которая выполнялась бы до загрузки Windows" и как таковым загрузчиком ОС.

Можно конечно и в биос зашить свое... но это уже отдельная тема, да и не надо это тебе, я так думаю...
---------
Перед тем как задать вопрос, поищи сначала сам ответ. Яндекс в руки и вперед... )
Ответ отправил: nimoid (статус: 6-ой класс)
Отправлен: 17.12.2005, 15:45

Отвечает: Denisss
Здравствуйте, REFERI!
Пишете программу под DOS (Delphi 4-9 такого не позволяет, ищите Delphi 16-битную). Можно написать в TurboPascal.
Прописываете ее в Autoexec.bat и перезагружаете компьютер.
Перед запуском Windows будет запущена Ваша программа и после ее завершения будет загружена Windows.
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 17.12.2005, 16:04


Вопрос № 31.670
Здравствуйте уважаемые эксперты!
Как можно в моей программе создавать собственные exe файлы?
Отправлен: 17.12.2005, 15:41
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Sassoft!
Не иначе как написав собственный компилятор и линковщик.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.12.2005, 15:50

Отвечает: Denisss
Здравствуйте, Sassoft!
Написать программу-компилятор (см. прикрепленный файл)

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.

Ответ отправил: Denisss (статус: Специалист)
Отправлен: 17.12.2005, 15:59

Отвечает: nimoid
Здравствуйте, Sassoft!

Хм... смотря для каких целей.

Либо пиши компилятор, либо можешь засунуть в ресурсы exe-файл, который потом использовать.
---------
Перед тем как задать вопрос, поищи сначала сам ответ. Яндекс в руки и вперед... )
Ответ отправил: nimoid (статус: 6-ой класс)
Отправлен: 17.12.2005, 16:28

Отвечает: Golden Spider
Здравствуйте, Sassoft!

Для этого прийдется попотеть. Т.к. чтобы программа создавало exe файлы (т.е. программы) нужно написать свой компилятор.
---------
Семь раз проверь, один раз откомпилируй!
Ответ отправил: Golden Spider (статус: 4-ый класс)
Отправлен: 17.12.2005, 21:21


Вопрос № 31.675
Драсти всем!

Недавно начал работать с БД в делфи. Появилось 2 вопроса:

1. Как связать 2 и более таблиц без компонента Table (все делаю с помощью Query и SQL запросов) ?

2. Как можно сохранить/загрузить дерево данных в таблицу? Компонент TreeView.
Отправлен: 17.12.2005, 16:46
Вопрос задал: nimoid (статус: 6-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, nimoid!
1. все зависит от БД. Можно решить это с помощью Views. А можно просто с клинтской машины делать выборку с помощью конструкции inner или outer join'ов. Например, имеется две таблицы, у которых имеется поле, по которому можно связать их (к примеру ID). Тогда пишем: select * from table1 inner join table2 on table1.ID = table2.ID. Разница в том, что во Views запрос выполняется на стороне сервера и расходует ресурсы сервера и вернет резалтсет, а во втором случае - ресурсы клиентской машины.

2. Я не совсем понял что уда грузить. Можно пояснить?
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 17.12.2005, 17:00
Оценка за ответ: 5
Комментарий оценки:
аха, на счет связей разобрался...

а грузить - саму структура дерева (имена могут повторяться)

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

1) Таблицы связываются не в Delphi, а в БД. Query только отображает состояние БД.
Пример связки на SQL приведен в приложении
2) Как строить деревья в БД см.
http://www.az-design.ru/Support/DataBase/DBTreeToc.shtml

Приложение:

Ответ отправил: Архангельский Андрей Германович (статус: Студент)
Отправлен: 17.12.2005, 17:02
Оценка за ответ: 5
Комментарий оценки:
Отлично, спасибо!

Отвечает: sir henry
Здравствуйте, nimoid!
1. В Query нет связи таблиц, там есть выборка из двух и более таблиц по определенному условию. Например у Вас есть две таблицы:
1) Справочник Spr с полями NN и Name, в которых номер товара и его название соответсвенно
2) Таблица продаж Prod с полями Ntov, Kol, Dtprod в которых хранится № товара, количество проданного товара и дата продажи соответсвенно
Если взять аналог связи таблиц, то Вам, для примера, нужно выяснить сколько проданно определенного товара за какое-то число. Запрос будет выглядеть так:
SELECT spr.name, prod.kol FROM spr, prod WHERE spr.nn=Номер_товара AND prod.ntov=spr.nn AND prod.dtprod=Дата
Объяснения:
Выборка будет по двум полям - название товара из справочника и количество проданного товара из таблицы продаж (SELECT) из таблиц spr и prod (FROM) по условию что номер товара из справочника равен только выбранному определенному товару и номер товара из таблици продаж равен номеру товара из справочника и дата продажи равна определенной дате (WHERE). В этом условии условие №1 и условие №2 служат аналогом связи между таблицами.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.12.2005, 17:54
Оценка за ответ: 5
Комментарий оценки:
Сенкс!


Вопрос № 31.681
Спасибо за ответы. Теперь надо немного пояснить вопрос. Всем известно что Windows не позволяет выполнять некоторые действия. Т.е. надо эти действия выполнять до того как эта Windows полностью загрузится. Приложение под DOS написать не проблема и потом загрузиться с дискетки, перезагрузиться опять… но это все гемор. Надо чтоб винда сама до загрузки «себя» запускала эту программу. Как такое сотворить. Может хотя бы ссылочки на статьи подкинете.
Отправлен: 17.12.2005, 17:56
Вопрос задал: REFERI (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, REFERI!
По тому условию, как Вы поставили, это сделать в принципе невозможно. Чтобы винда запустила свою программу она должна загрузится, но ведь она еще не загрузилась, следовательно ничего запустить не может.
Этот вопрос из той-же серии, что как-то тут появлялся "Как запустить программу на выключеном компе". :)
Если нужны какие-то действия до того, как винда захватит диск, то тут самое оптимальное - другая ОС и запуск программы из нее.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.12.2005, 18:40


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

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

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

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

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


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


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

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное