Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Январь 2006 → | ||||||
1
|
||||||
---|---|---|---|---|---|---|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
|
30
|
31
|
Статистика
-1 за неделю
Программирование на Delphi (выпуск 40)
Программирование на DELPHI | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Выпуск #40 (29 января 2006 г.) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Лидеры по количеству баллов:
Некоторая статистическая информация:
Примечание: Под форматированием текста понимается возможность оформлять ответы с использованием html-тегов. Если Вы хотите, чтобы Вашего имени (ника) не было в данной таблице, отправьте письмо по этой ссылке с зарегистрированного у нас адреса. В теле письма, пожалуйста, укажите причину удаления имени из таблицы. Нам важно ваше мнение. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Задать вопрос в рассылку | Задать вопрос с помощью web-формы | Система "Эксперт" | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вопрос #224 (автор вопроса: Alex; вопрос отправлен: 16.01.2006 16:32): Как создать программу, чтобы при нажатии на Button1 она загружала в Memo1 текстовый файл по адресу: http://www.myserver.com/news.txt? [Ответить на вопрос] Вопрос #225 (автор вопроса: breeze82@mail.ru; вопрос отправлен: 18.01.2006 17:38): Есть к примеру такая строка: Books[1].WorkSheets[1].Rows[1].HorizontalAlignment := 3; Она, как Вы знаете, в Excel'е выравнивает по центру и по горизонтали. Подскажите, как включить перенос по словам в той же ячейке? Такая строка выдает ошибку: XLApp.WorkBooks[1].WorkSheets[1].Columns[1].Autosize := True; [Ответить на вопрос] Вопрос #226 (автор вопроса: Ярошук Ю.А.; вопрос отправлен: 18.01.2006 19:03): Как напечатать TForm и все копмоненты на ней в альбомном формате А4? [Ответить на вопрос] Вопрос #227 (автор вопроса: Alex; вопрос отправлен: 19.01.2006 00:16): Я не могу получить вложение в письме, программа его просто не видит. Вот текст: Вопрос #228 (автор вопроса: Захар; вопрос отправлен: 19.01.2006 12:44): Здравствуйте. Есть такая проблема. Я пишу (на Delphi 7, мне он по душе, раньше имел опыт только на ZX-Spectrum :-)) программу по составлению сметы на строительные работы (нужно по работе). Сам являюсь начинающим, но хотелось бы довести до конца. И в смысле интересно, да и развиваться надо :-) Сделал основу. Таблица, в нее по кнопке добавляются услуги с ценой и количеством. Список услуг сохраняю в файл. Проблема в том, что цену приходится вводить вручную, как ее состыковать со списком услуг? И еще не могу придумать как сохранить готовую смету. Там пять столбиков плюс итоговая шапка ну и прочая лабуда. Если кто-нибудь возьмется отвечать, то прошу поподробнее. У меня мысли не успевают за текстом :-))) Был бы рад постоянной переписке с кем нибудь, в целях личного самообразования :-) [Ответить на вопрос] Вопрос #229 (автор вопроса: Ярошук Ю.А.; вопрос отправлен: 19.01.2006 14:33): Как вывести TCalendar на один месяц с положением цифр не по центру ячейки, а в левый или правый угол? [Ответить на вопрос] Вопрос #230 (автор вопроса: trahten; вопрос отправлен: 27.01.2006 22:59): Как ячейке StringGrid присвоить цвет или вставить рисунок?
[Ответить на вопрос] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вопрос #205: 1. [Отвечает: SHKoder@deagnostic.ru (статус: Эксперт: 8-ой класс), 15.01.2006 14:19]: П опробуйте обновить свои кодеки, или вы используете не ту длл для воспроизведения, проверьте версии, а вообще вы изобретаете велосипед - успехов вам в этом не лёгком труду. Оценка за ответ: 3. Вопрос #216: 1. [Отвечает: SHKoder@deagnostic.ru (статус: Эксперт: 8-ой класс), 15.01.2006 14:15]: procedure TfrmMDIChildMain.Button1Click(Sender: TObject);
Оценка за ответ: 5. 2. [Отвечает: Alex (статус: Эксперт: 2-ой класс), 15.01.2006 15:23]: Проще использовать компонент «RadioGroup». Записываешь названия радиобуттонов в «Items» (каждая строчка – отдельный бутон), А на кнопку клёпаешь: procedure TForm1.Button1Click(Sender: TObject);
Всё работает! Оценка за ответ: 3. 3. [Отвечает: Садовников Владимир (статус: Практикант), 15.01.2006 17:26]: Этот код врубает/вырубает все RadioButton'ы на форме: procedute TForm1.SetupRadio(Enable:Boolean);
Оценка за ответ: 5. 4. [Отвечает: sattar (статус: Эксперт: 1-ый класс), 15.01.2006 17:28]: var
Оценка за ответ: 5. 5. [Отвечает: Ares (статус: Эксперт: 4-ый класс), 15.01.2006 20:23]: По-моему это можно сделать так: for i := 0 to Form1.ControlCount - 1 do
Оценка за ответ: 4. 6. [Отвечает: Aleksey Mayboroda (статус: Эксперт: 1-ый класс), 16.01.2006 8:42]: for i := 0 to Form1.ControlCount - 1 do
Оценка за ответ: 5. 7. [Отвечает: мэйл_рфдл2 (статус: Эксперт: 4-ый класс), 16.01.2006 8:49]: Примерно так: procedure XXX;
Оценка за ответ: 5. 8. [Отвечает: progger (статус: Эксперт: 1-ый класс), 16.01.2006 8:11]: В этом случае можна написать такую процедурку: procedure clearRadioButton;
Оценка за ответ: 4. 9. [Отвечает: Трапезников Антон (статус: Эксперт: 10-ый класс), 16.01.2006 11:30]: Если имена RadioButton'ов отличаются только индексами, то можно использовать такой код: var
Если же вы используете нестандартные имена компонентов, то подойдет следующий код: for i := 0 to ComponentCount - 1 do
Удачи! Оценка за ответ: 5. 10. [Отвечает: mihey (статус: Эксперт: 1-ый класс), 16.01.2006 9:52]:
Оценка за ответ: 5. 11. [Отвечает: Романишин Виталий Юрьевич (статус: Эксперт: 1-ый класс), 16.01.2006 9:57]: Наверное вы ошиблись, не RadioButton(ы) а CheckBox(ы) то это просто: procedure TForm1.Button1Click(Sender: TObject);
Примерно также можно работать со всеми компонентами. Оценка за ответ: 4. 12. [Отвечает: PVS (статус: Эксперт: 9-ый класс), 16.01.2006 10:04]: for i:=1 to MyForm.ComponentCount do
Оценка за ответ: 5. 13. [Отвечает: Матвеев И.В. (статус: Практикант), 16.01.2006 20:36]: Вот Вам кусок кода: procedure TForm1.Button1Click(Sender: TObject);
Примечание: Код изменит Enabled только для элементов, относящихся к форме, если на форме находится панель, а на ней RadioButton - его свойство Enabled изменено не будет. Оценка за ответ: 5. 14. [Отвечает: Ершов Денис (статус: Студент), 16.01.2006 16:47]:
Приветствую, Jake. procedure ...;
Можно также использовать для поиска свойства Components и ComponentCount, но необходимо четко представлять различия в компонентах родитель и владелец. Иначе в сложных формах можно дать маху. 2. Можно задать более жесткие критерии поиска. В каждом компоненте есть свойство Tag для хранения пользовательских данных. Его можно использовать для активации только определенной выборки компонентов, свойства Tag которых установлено в определенное значение. const
3. В конце концов эти значения можно хранить в файле формата: <Имя компонента>=<Значение Enabled компонента> procedure ...;
4. Есть и более экзотический способ - сохранить при запуске форму в поток: BinStream.WriteComponent(Form1); - а затем восстанавливать ее из этого потока: BinStream.ReadComponent(Form1); 5. Кто-нибудь! Остановите меня... :) Оценка за ответ: 5. 15. [Отвечает: Деревянко Евгений (статус: Эксперт: 4-ый класс), 16.01.2006 19:54]: Если все компоненты лежат на форме (а не на панельке, например), то это можно сделать так: procedure TForm1.Button1Click(Sender: TObject);
Если анализ проводится для компонентов, лежащих на другом котейнере, не форме, то просто вместо Form1 следует просто писать имя контейнера. Оценка за ответ: 5. 16. [Отвечает: Ermakova Dasha (статус: Специалист), 17.01.2006 17:55]: procedure TForm1.Button1Click(Sender: TObject);
Оценка за ответ: 5. 17. [Отвечает: Den (статус: Эксперт: 1-ый класс), 17.01.2006 20:09]: for i:=1 to 20 do
Оценка за ответ: 5. 18. [Отвечает: Лучников А.И. (статус: Студент), 18.01.2006 15:10]: Самый простой способ: for i:=0 to ComponentCount-1 do
Оценка за ответ: 5. 19. [Отвечает: tmp (статус: Эксперт: 1-ый класс), 19.01.2006 0:39]: Здраствуй, Jake! Если хочешь работать сразу с большим количеством компонент, то создание их следует сделать динамическим. Т.е, создаешь массив, состоящий из 20 эл-тов TRadioButton, для каждого из них можно будет задать один и тот же обработчик события, при этом определять, какой же объект все-таки вызвал обработчик мы будем через объект Sender, который указывает на "Отправителя". Например: есть массив: a:array[1..n]of TRadioButton; Это создает: for i:=1 to n do
Свойства меняем по вкусу. Теперь можно в цикле менять выборочно свойство a[i].enabled. Оценка за ответ: 5. 20. [Отвечает: Yurchik (статус: Студент), 20.01.2006 16:11]: Вот код, который переводит ВСЕ RadioButton`ы в Enabled: procedure TForm1.Button1Click(Sender: TObject);
Если RadioButton`ы именуются как RadioButton1, RadioButton2, ..., то можно написать так: procedure TForm1.Button1Click(Sender: TObject);
При этом можно управлять не всеми RadioButton`ами сразу, а группами. Оценка за ответ: 5. 21. [Отвечает: Dron (статус: Специалист), 20.01.2006 19:37]: Вариантов решения может быть несколько, но смысл один - использовать метод FindComponent(). Вот так например: procedure TForm1.Button1Click(Sender: TObject);
Оценка за ответ: 5. Вопрос #217: 1. [Отвечает: мэйл_рфдл2 (статус: Эксперт: 4-ый класс), 16.01.2006 8:58]: Примерно так: unit Unit1;
Оценка за ответ: 5. 2. [Отвечает: midav.land.ru (статус: Эксперт: 8-ой класс), 16.01.2006 10:44]: Для создания нового каталога есть функции CreateDir, CreateDirectory. Они создают указаный каталог. Так как это функции, то они возвращают True если создать удалось. Но все каталоги, перечислены в пути должны существовать (естественно, кроме последнего). Для преодоления этой особенности пользуемся ForceDirectories. Он создаст весь каталог. Теперь к нашим баранам :) Берёшь текущий каталог, добавляешь имя нужного (можно в пользователя спросить) и вызываешь функцию создания каталога. Потом наверное придётся вызвать обновление для TShellTreeView, но кажется это уже не обязательно. Оценка за ответ: 5. 3. [Отвечает: Деревянко Евгений (статус: Эксперт: 4-ый класс), 16.01.2006 20:04]: А почему бы просто не создать новый каталог при помощи CreateDirectory или CreateDirectoryEx, затем отобразить его в TShellTreeView при помощи ShellTreeView.Refresh(Node: TTreeNode)? Оценка за ответ: 5. 4. [Отвечает: Лучников А.И. (статус: Студент), 19.01.2006 11:19]:
Путь к выбранному каталогу:
ShellTreeView1.Path
или
ShellTreeView1.SelectedFolder.PathName.
Для того, чтобы изменения показывались сразу есть Свойство
AutoRefresh // по-умолчанию False.
Далее создаёшь новый каталог
NewFolder:=ShellTreeView1.Path+'\New Folder';
CreateDir(NewFolder);
или
ForceDirectories(NewFolder).
Рекомендую, перед созданием каталога проверить на тип выбранной папки, чтоб
не попробовать создать каталог в папке "Мой компьютер" (я, например, не
рискнул)
ShellTreeView1.SelectedFolder.Properties
вот кусок из ShellCtrls.pas
Чтоб перейти на вновь созданную папку (как, в принципе и на любую папку) ShellTreeView1.Path:=NewFolder; { можно добавить ShellTreeView1.SetFocus; если добавление каталога было по кнопке, чтоб сразу было видно } З.Ы. У компонента TShellTreeView есть своя (точнее-шеловская) popup-менюшка, но она перекроется, если подключить свой PopupMenu. К сожалению, в ней нет пунктика "создать", а то было бы совсем просто. Оценка за ответ: 5. 5. [Отвечает: Dron (статус: Специалист), 20.01.2006 19:36]:
Использовать TShellTreeView для создания каталогов не нужно - для
этого существуют функции MkDir, CreateDirectory, ForceDirectories и др.
Нужно просто воспользоваться ими, после чего обновить дерево
каталогов:
MkDir(InputBox('New dir','Please enter the full dir path:','C:\temp')); Оценка за ответ: 5. Вопрос #218: 1. [Отвечает: Aleksey Mayboroda (статус: Эксперт: 1-ый класс), 16.01.2006 8:44]: Я для этой цели использовал TWebBrowser. В нем есть возможность добавлять html текст в конец, ну а там уже можешь добавлять что хочешь, хоть видеофайл вставить с киношкой :) Оценка за ответ: 4. 2. [Отвечает: Трапезников Антон (статус: Эксперт: 10-ый класс), 16.01.2006 11:41]: Здравствуйте, Олег. Т.е. как я понял проблема сводится к вставке изображения в RichEdit. Есть замечательный компонент - RXRichEdit (в библиотеке RXLib), с помощью него можно реализовать вставку изображений. Недавно наткнулся (на www.sources.ru , кажется) на такой код:
function BitmapToRTF(pict: TBitmap): string;
А вот пример использования этой функции:
Оценка за ответ: 5. 3. [Отвечает: PVS (статус: Эксперт: 9-ый класс), 16.01.2006 10:08]: Можно импортировать TBrowser (ActiveX от InternetExplorer'a) и тогда можно рисовать все, что могут HTML, JavaScript и другие Script-ы. Оценка за ответ: 4. 4. [Отвечает: Матвеев И.В. (статус: Практикант), 16.01.2006 20:36]: Если смайлики планируется делать анимированными - можно использовать InternetExplorer Control в виде TWebBrowser. Или использовать THTMLViewer - это VCL аналог WebBrowser'a - отображает чистый html, может отображать и анимационные Gif'ы, но там прийдется поработать - ищите его на www.torry.ru. Если смайлики делать анимационными не планируется - можно испрользовать TRichView. Смотрите на www.trichview.com. Оценка за ответ: 5. 5. [Отвечает: midav.land.ru (статус: Эксперт: 8-ой класс), 16.01.2006 10:55]: В компонентах JEDI (http://www.delphi-jedi.org) в примерах есть как сделать окошко со смайликами, и не только... Оценка за ответ: 3. 6. [Отвечает: Zeon (статус: Эксперт: 4-ый класс), 17.01.2006 0:16]: Я так понимаю у тебя клиент-сервер. С точки зрения экономии трафика лучше чтобы в базе каждого клиента уже имелись картинки с нужными смайликами (в любом виде, хоть ImageList, хоть просто пронумированные файлы). А передавать будешь только номер нужного смайлика. Или можно, конечно, тупо гнать по сокетам картинку через MemoryStreem. Но это имеет смысл только в случае регулярного обновления базы смайликов на сервере. Оценка за ответ: 4. Вопрос #219: 1. [Отвечает: Матвеев И.В. (статус: Практикант), 16.01.2006 20:32]: Я провел пару экспериментов - действительно подключ Security в ключе Shares не находился с помощью RegEnumKeyEx. А RegQueryInfoKey возвращала то что Вы говорили, но исключения у меня никакого не возникло. Я добавил еще один подключ в Shares, назвал его test, проверил работу - все работало нормально, только RegQueryInfoKey возвращало MaxSubKeyLen=15 почему-то. Тогда я удалил этот новый ключ. Программа работет - благополоучно определяет подключ Security. Оценка за ответ: 3. 2. [Отвечает: Yurchik (статус: Студент), 20.01.2006 16:46]: Не знаю, в чем может быть причина. Нужно посмотреть код. А Вы вовремя закрываете ключи реестра функцией RegCloseKey? Функции RegOpenKeyEx и RegQueryInfoKey возвращают значение ERROR_SUCCESS в случае успешного вызова. В противном случае они возвращают код ошибки. Описание ошибки по ее коду можно получить, используя функцию FormatMessage. Вот пример: var
Оценка за ответ: 5. Вопрос #220: 1. [Отвечает: Садовников Владимир (статус: Практикант), 15.01.2006 17:30]: 1. Сделай (не обязательно) BorderStyle у формы bsNone или MDIChild. 2. Используй событие OnPaint, в котором рисуй прямо на канве формы и контролов (property Canvas) всё, что только вздумается. Оценка за ответ: 3. 2. [Отвечает: мэйл_рфдл2 (статус: Эксперт: 4-ый класс), 16.01.2006 9:00]: Смотри в сторону www.alphaskins.com. Оценка за ответ: 3. 3. [Отвечает: Матвеев И.В. (статус: Практикант), 16.01.2006 20:31]: Вариант первый: Использование Skin библиотек - это могут быть библиотеки просто изменяющие внешний вид контролов в соответствии с настроечными файлами - скинами. Например FreeSkinEngine. Если Вы хотите сделать что-то наподобие WinAmp - чтобы в скинах можно было бы изменить не только вид контролов, но и их положение - используйте библиотеку BusinessSkin. Ее использует BSPlayer - можете посмотреть. Вариант второй: Вы можете реализовать свою "машину плагинов", это можно оформить в виде dll библиотек, обрабатывающих отрисовку окна. Этот вариант годится для небольших программ, например для простенького проигрывателя. Не думайте, что это очень сложно - такое и на "Великом и Могучем" Ассемблере пишут. Неоспоримое преимущество этого метода в том, что в скинах можно изменить не только внешний вид, но и особенности поведения - например сворачиваться не на панель Пуск, а в трей. Вариант третий: Если никакие скины не нужны, а требуется просто сделать красивое окно с красивыми контроломи - просто используйте TImage. Вы можете взять темы из Stardock WindowBlinds. Там много разных рисунков: границы, углы форм, кнопок, рисунки RadioButton, CheckBox и др. Оценка за ответ: 5. 4. [Отвечает: midav.land.ru (статус: Эксперт: 8-ой класс), 16.01.2006 10:57]: Использовать скины, например AlphaSkin (кажется так он называется). Но предупреждаю сразу - много библиотек компонент со скинами не смотрят на то, какую они создают загрузку процессора. Оценка за ответ: 4. 5. [Отвечает: Деревянко Евгений (статус: Эксперт: 4-ый класс), 16.01.2006 20:26]: В DesignTime ставишь свойство TransparentColor в True, TransparentColorValue таким же как и Color, BorderStyle в bsNone а потом кидаешь на форму TImage, грузишь в них весёлые картинки и всё. Кстати, TImage можно использовать как кнопку. Оценка за ответ: 4. 6. [Отвечает: Zeon (статус: Эксперт: 4-ый класс), 17.01.2006 0:23]: Хороший вопрос. Ты для начала спроси "Как написать программу?". А если серьёзно - часто можно добиться неплохих результатов при помощи обычных TImage, только надо посидеть над Фотошопом. Или ищи различные компоненты для визуального оформления(например на www.torry.net). Только не спрашивай как использовать компоненты, это уже отдельная тема. Оценка за ответ: 4. 7. [Отвечает: Ершов Денис (статус: Студент), 19.01.2006 14:27]: Приветствую, Роман. По умалчиванию окна программы имеют прямоугольную форму. Однако имеется возможность задать совершенно произвольную форму при помощи процедуры SetWindowRgn. При этом присваиваемый форме регион может быть прямоугольником, эллипсом, произвольным полигоном. В модуле Windows функции создающие регионы представлены семейством, содержащие в названии слова "Create" и "Rgn". Кроме того, с помощью функции CombineRgn можно производить комбинирование (сложение, вычитание) этих регионов. В общем для твоей задачи нужен рисунок, где один цвет должен принят как цвет фона. Анализируем изображение, создавая регион по контуру в рисунке. Применяем полученный регион к окну программы по событию OnCreate формы. Осталось по событию OnPaint выводить искомое изображение на полученную форму. Фон виден не будет, так как будет за пределами региона окна. Так как и формы и элементы управления на ней являются частными случаями окна, данный фокус можно провести с кнопкой, Мемо и пр. винконтролами. Данная тема очень хорошо представлена в книге "Делфи глазами хакера". В аттаче пример из этой книги, посвященный окну в виде "Тринити, анфас". Загрузить прикреплённый файл >> Оценка за ответ: 5. Вопрос #221: 1. [Отвечает: Садовников Владимир (статус: Практикант), 15.01.2006 17:36]: Пожалуй, отвечу на свой вопрос, так как уже нашёл решение методом проб и ошибок. А надо было написать POSIX- и Win32-совместимый класс окна на C++. Привожу готовый код (к сожалению, на C++). Компиляция осуществляется под управлением макроса __WIN32__. Я его определил как: // System Macros Definitions Для организации консоли нам понfдобятся никсовые <curses> и <term>, под Винду - <windows>: #ifndef __WIN32__ /* *nix */ Теперь класс окна (!) консоли описывается так: class TWindow public: // Деструктор // Форматированный вывод // Вывод строки // Вывод символа // Обновление окна на общем экране // Очистка окна // Считывание строки (!!!) с окна Теперь рассмотрим каждый метод. Конструктор должен запомнить параметры текстового окна и создать буфер вывода, который потом будет отображаться на консоль. explicit TWindow::TWindow(int X, int Y, int Width, int Height): #ifndef __WIN32__ /* *nix */ SMALL_RECT rect={0, 0, FWidth-1, FHeight-1}; // Размеры буфера // Параметры ввода с консоли Деструктор тривиален и должен освобождать выделенные ресурсы^ TWindow::~TWindow(void) Функции форматированного вывода также тривиальны: int TWindow::VPrintF(const char *fmt, va_list args) Refresh(); int TWindow::PrintF(const char *fmt, ...) Refresh(); Вывод строки тоже вполне прост: void TWindow::PutS(const char *str) Вывод символа на консоль - частный случай вывода строки: void TWindow::PutChar(char ch) Refresh(); Вот с обновлением окна под Win32 начинаются проблемы: приходится считать координаты, куда необходимо поместить скрытый буфер: void TWindow::Refresh(void) // Создаём временный буфер и считываем в него прямоугольную // Расчёт координат // Теперь записываем прямоугольную область окна на консоль delete data; То же самое и с очисткой окна: господа из компании Microsoft решили возложить всю рутину на обычных программистов: void TWindow::Clear(void) CHAR_INFO *data=new CHAR_INFO[FWidth*FHeight]; delete data; // Устанавливаем положение курсора в позицию (0,0) И на закуску - считывание строки с консоли. Опять видна криворукость Windows. int TWindow::GetStr(char *string, int max) SetConsoleCursorPosition( // Считываем строку // Какой умник сказал, что нам нужны символя CR и LF в #endif /* __WIN32__ */ Этот класс консоли предназначен для SingleThreaded-приложений. Если потребуется использование окон несколькими нитями, то необходимо использовать объекты синхронизации - мьютексы, критические секции, семафоры. Но это уже совсем другая история... Оценка за ответ: 5. 2. [Отвечает: Трапезников Антон (статус: Эксперт: 10-ый класс), 16.01.2006 11:50]: Посмотрите здесь: http://www.helloworld.ru/texts/comp/lang/delphi/console/index.htm Оценка за ответ: 4. Вопрос #222: 1. [Отвечает: SHKoder@deagnostic.ru (статус: Эксперт: 8-ой класс), 15.01.2006 14:18]: Слишком обширный вопрос. Если нужно получить данные то делайте скрипт получения данной select top 1 value from table. Затем ADOQuery.FeildByName('value').AsInteger; делайте с ней что хотите. Оценка за ответ: 4. 2. [Отвечает: Трапезников Антон (статус: Эксперт: 10-ый класс), 16.01.2006 11:06]: Здравствуйте, Ilay Babakov. Первое что Вам нужно сделать - настроить подключение к БД. Можно использовать BDE (но я рекомендую Вам навсегда забыть о ней), можно ADO (имхо, лучше всего использовать ADO), можно dbExpress (эту библиотеку приоритетней всего использовать если Ваша программа в основном читает, а не пишет в БД). Все вышеперечисленное штатно входит в Delphi, приведу пример для ADO. Вы можете использовать компонент ADOTable и в его свойстве ConnectionString настроить (build) подключение как базе данных MS Access. Например: Provider=Microsoft.Jet.OLEDB.4.0; При этом будет открыта база данных D:\Path\dbname.mdb, будет использован драйвер ADO для базы данных Access (Microsoft.Jet.OLEDB.4.0). Имя пользователя будет Admin без пароля (эти значения присваиваются поумолчанию при создании базы Access). Если Вы всё-таки захотите использовать пароль, то его надо будет задать в ствойстве Jet OLEDB:Database Password. Если у Вас установлен режим безопасности, то необходимо указать файл .MDW или .MDA в свойстве Jet OLEDB:System database. Взять что-то из БД можно так. var i := AdoTable1['Имя поля']; Операции с числами проводятся совершенно стандартно. Важно только учитывать особенности типов. Советую Вам прочитать какую-нибудь книгу по программированию БД в Delphi, т.к. эта тема очень обширна и имеет множество подводных камней и нюансов. Оценка за ответ: 5. 3. [Отвечает: PVS (статус: Эксперт: 9-ый класс), 16.01.2006 11:09]: Ячейка в Access(как и в любой другой базе) определяется названием столбца и номером строки(который зависит от сортировки, так что говорить о ТОЧНОМ определении ячейки можно только при наличии уникального поля или набора полей - "ключа"). Если же надо делать вычисления в пределах одной строки, то к полям можно обращатся по имени myQuery.FieldByName("FLD_NAME").AsInteger или по номеру myQuery.Fields[i].AsInteger и проводить вычисления с ними или писать сразу нужный SQL: myQuery.SQL.Text:='select fld1+fld2 as fsumm, fld5*fld20 as fmult from accesstable'; Оценка за ответ: 5. Вопрос #223: 1. [Отвечает: Трапезников Антон (статус: Эксперт: 10-ый класс), 16.01.2006 10:40]: Здравствуйте, Игорь. Для того чтобы определить слово под курсором добавтье следующий код в процедуру OnMouseMove RichEdit'a. uses
Как видите все на самом деле проще. Оценка за ответ: 5. 2. [Отвечает: мэйл_рфдл2 (статус: Эксперт: 4-ый класс), 16.01.2006 9:17]: Легче было бы использовать ListBox, там и функций для Вашей нужды валом. А так, примерно так (не полностью но что-то есть): unit Unit1;
Оценка за ответ: 4. 3. [Отвечает: Матвеев И.В. (статус: Практикант), 16.01.2006 20:26]: Высылаю пример, в этом примере при наведении курсора мыши на слово оно выделяется жирным шрифтом (остальное делайте сами). Работает довольно устойчиво, хотя некоторые глюки все-таки есть. Загрузить прикреплённый файл >> Оценка за ответ: 5. Все вопросы и ответы на них Вы всегда можете найти на нашем сайте в разделе "Эксперт": http://www.delphi.int.ru/modules.php?name=expert. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Написание простого медиа-проигрывателя Простейший медиа-проигрыватель можно создать стандартными средствами Windows. Существуют модули, которые доступны из любого языка программирования - это ActiveX. Delphi в этом плане не исключение. Встроенный в систему Windows Media Player имеет собственный ActiveX-модуль, который мы легко можем использовать в своей программе. Правда, кардинально изменить в нём что-либо не получится. В данной статье я покажу пример, как использовать этот компонент. Для начала ActiveX-компонент (сокращённо AX) нужно интегрировать в оболочку Delphi. Делается это легко: открываем диалоговое окно Component - Import ActiveX Control. В разных версиях Delphi этот пункт меню может называться по-разному, но ключевым остаётся слово ActiveX. В открывшемся окне в списке компонент найдите строку Windows Media Player. Нажмите кнопку Install. В появившемся окне можно указать, в какой пакет следует установить компонент. Можно оставить всё по умолчанию и нажать ОК. После этого на вкладке ActiveX палитры компонент появится кнопка WindowsMediaPlayer. Теперь можно приступить к созданию проигрывателя. Для начала поместите компонент на форму - щёлкните по его значку и затем по форме. Вы увидите знакомое изображение - изображение проигрывателя. Его внешний вид зависит от версии установленного в системе компонента. Примерный вид того, что вы увидите, изображён на рисунке 1.
Для начала давайте сделаем возможность открытия нужного файла. За путь к файлу, который нужно воспроизводить, отвечает свойство URL типа WideString (строка). Давайте сделаем для программы меню, куда и добавим нужный нам пункт. Поместите на форму TMainMenu (страница Standard). Дважды щёлкните по значку TMainMenu, лежащему на форме. Откроется дизайнер меню. Выделите единственный пункт в заголовке меню и в его свойстве Caption напишите "Файл". Затем щёлкните по созданному пункту и снизу появистя ещё одна пустая строка. Там и введите название нашего пункта - "Открыть". Следующей строкой давайте создадим разделитель для меню - в свойстве Caption поставьте один-единственный символ - минус ("-"). Следующей строкой сделайте пункт "Выход". Ну вот, программа уже имеет меню, хотя и небольшое. Теперь нужно связать пункт меню с диалогом открытия файла. Найдите компонент TOpenDialog на странице Dialogs и поместите его на форму. Активируйте свойство Filter и нажмите на кнопку с тремя точками ("..."). В появившемся окне введите желаемые типы файлов. В поле Filter Name нужно ввести описание типов файлов, а в поле Filter - сам фильтр. Пример на рисунке 2. Чтобы с компонентом было удобно работать, измените его свойство Name на MediaPlayer. Выделите компонент и перейдите в окно Object Inspector. Свойств (Properties) у компонента не очень много, а вот событий (Events) гораздо больше. Но мы используем лишь некоторые из них. Для удобства, компонент MainMenu1 переименуем в MainMenu, а OpenDialog1 - в OpenDialog. Пришло время запрограммировать пункт меню "Открыть". Откройте дизайнер меню и дважды щёлкните по нужному пункту - откроется редактор кода. В этом месте следует написать: if OpenDialog.Execute then Метод Execute открывает диалог и, если пользователь не нажал "Отмена", то функция возвращает значение True, а в FileName записывается путь к выбранному файлу. Затем мы присваиваем свойству URL проигрывателя выбранный файл. Запустите программу и попробуйте открыть файл. Всё должно работать, файл должен воспроизводиться. Теперь давайте приведём окно проигрывателя к нормальному виду. Сам проигрыватель нужно растянуть на всю ширину окна - измените его свойство Align на alClient. Саму форму стоит сделать поменьше, т.к. наш проигрыватель пока что воспроизводит только аудио-файлы. На мой взгляд, для формы можно установить ширину (Width) равной 300, а высоту (Height) - 200. Наконец, можно изменить вид окна и установить BorderStyle в значение bsSizeToolWin, а заголовок (Caption) - "Simple Media Player". Теперь запрограммируем пункт "Выход" - для этого следует написать в его обработчике всего одну строку: Self.Close; Этот метод закрывает текущую форму (Self - объект, выбранный по умолчанию, форма) и завершает приложение. Теперь нужно сделать в меню элементарные команды управления воспроизведением - Start, Stop, Pause. Конечно, в проигрывателе и без того есть существующие кнопки, но они должны иметь своё отражение и в меню. Для начала добавьте в заглавную строку меню (туда, где "Файл") пункт "Управление". Затем добавьте два пункта - "Старт / Стоп" и "Пауза". Запрограммировать эти команды легко. Для управление воспроизведением служит набор методов Controls, а узнать текущее состояние проигрывателя можно из свойства PlayState. Вот как выглядит обработчик пункта "Старт / Стоп": if MediaPlayer.PlayState =wmppsPlaying then А вот обработчик "Паузы": if MediaPlayer.PlayState =wmppsPlaying then Запустите программу и проверьте её работоспособность.
Как видите, мы создали сравнительно простой, но рабочий проигрыватель. В следующий раз мы продолжим его разработку. Примерное изображение окна программы после выполнения всех действий, описанных в статье, показано на рисунке 3. Автор: Ерёмин Андрей Присылайте свои статьи по адресу info@delphi.int.ru с темой 'Articles' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки и на сайте. Также вы можете заполнить вот эту форму. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Из данного раздела Вы можете скачать различные файлы: компоненты, plug-in'ы для Delphi, документацию по программированию, программы, игры, написанные на Delphi и всё остальное... Вы можете добавить свои файлы в данный раздел. Чтобы сделать это, пожалуйста, заполните форму на сайте. Новые файлы на сайте:
Чтобы перейти к разделу "Файловый архив" на сайте, нажмите на эту ссылку. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь представлены ссылки на дружественные сайты. Обмен ссылками и баннерами всегда приветствуется. Здесь представлены самые последние ссылки:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Голосование на веб-странице: :)) Если Microsoft начнет выпускать автомобили то ... :)) Жизнь подобна зависанию в интернете - занятие бесполезное, а уходить жалко. :)) Вначале был бит, потом байт, и только потом появилось слово... :)) Microsoft выпустила свой первый вирус, работающий без активации 30 дней, по проществии 30 дней вирус перестает действовать... цена новинки: $50. :)) Прочитал программист сказку про репку и говорит: :)) Встречаются два кореша, ну и один говорит другому: :)) Чем отличается моряк от интернетчика? У моряка девушка в каждом порту, у интернетчика - в каждом портале. :)) Присылайте свои анекдоты по этой ссылке: info@delphi.int.ru и они обязательно будут опубликованы. Желательно на компьютерную тему. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу! Если вы не нашли ответа на свой вопрос, не отчаивайтесь! Количество подписчиков постоянно растёт и, наверняка, найдётся тот человек, который поможет вам! а сегодня всё. До встречи через неделю!
Ведущий рассылки, Ерёмин Андрей. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Наши реквизиты в системе WebMoney: R379291065219, Z165075684614. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Наш сайт: http://www.delphi.int.ru/ E-mail: admin@delphi.int.ru; info@delphi.int.ru; expert@delphi.int.ru Страница рассылки: http://subscribe.ru/catalog/comp.soft.prog.delphifaq |
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphifaq Архив рассылки |
Отписаться
Вебом
Почтой
Вспомнить пароль |
В избранное | ||