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

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


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

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

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

Выпуск № 309
от 29.11.2005, 15:12

Администратор:Калашников О.А.
В рассылке:Подписчиков: 253, Экспертов: 47
В номере:Вопросов: 4, Ответов: 11


Вопрос № 30090: Привет Эксперты. HELP в TurboPascal-е был уникальным, в нем можно было найти что-угодно. HELP в Дельфях с точностью до наоборот - там ничего нельзя найти. У меня простая проблема, есть TSpeedButton на форме. В нее я загрузил картинку *.bmp файл. Я хо...
Вопрос № 30097: Вопрос доволно будничный, но хочется иметь доскональный ответ: Как в Delfi7 получить данные из командной строки, а точнее: имеется текстовый редактор и нужно чтобы TXT файлы открывались через него "без посредников" (типа OpenDialog)...
Вопрос № 30099: Здраствуйте! У меня очень интересный вопрос! Можно-ли сделать так: На форме есть обьект Memo, в него вводится код программы написанной на Pascal'e. Надо проверить этот код на правильность,тоесть запустить,ввести данные,проверить результа...
Вопрос № 30124: В Delphi7 есть компонент WebBrowser на странице "Internet". Я использую его для просмотра HTML файлов в своей программе, он меня устраивал, пока мне ни стало надо сделать контекстный поиск на загруженной странице, т.е. найти введённый польз...

Вопрос № 30.090
Привет Эксперты. HELP в TurboPascal-е был уникальным, в нем можно было найти что-угодно. HELP в Дельфях с точностью до наоборот - там ничего нельзя найти. У меня простая проблема, есть TSpeedButton на форме. В нее я загрузил картинку *.bmp файл. Я хочу эту картинку скопировать в другой объект примерно таким образом:
var
SpeedButton1: TSpeedButton;
B : TBitMap;
begin
B:=TBitmap.Create; //B.Handle

B.Assign(SpeedButton1.Glyph);

Form1.Canvas.Draw(10,10,B);
B.Free;
end;

Но на экран ничего не выводиться. Значит картинка не формируется. В HELP-е по функции
procedure Assign(Source: TPersistent); override;
написано, что именно таким образом нужно копировать одну картинку в другую. Что я делаю не так? Вроде все должно работать, ведь тип совпадает
TSpeedButton.Glyph = TBitMap;
Какой нехороший человек HELP писал?
Отправлен: 23.11.2005, 16:32
Вопрос задал: Березуев Роман Иванович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: sir henry
Здравствуйте, Березуев Роман Иванович!
Если исходить из приведенного Вами кода, то Вы никакую картинку не скопировали. У Вас SpeedButton просто-напросто не создан. Приведите код полностью, тогда можно будет что-нибудь сказать. А на хелп кивать не надо, дам все нормально. :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 23.11.2005, 17:03
Оценка за ответ: 3
Комментарий оценки:
Это я для сокращения не написал, что
TForm1 = class(TForm)
SpeedButton1: TSpeedButton;
...
public
B:TBitMap;
...
end;
begin
...
end;

Но словами ведь все объяснил.
SpeedButton создается автоматически.
Если написать
Form1.Canvas.Draw(0,0,SpeedButton1.Glyph);
Выводиться та самая картинка, что на кнопке нарисована.


Вопрос № 30.097
Вопрос доволно будничный, но хочется иметь доскональный ответ:
Как в Delfi7 получить данные из командной строки, а точнее:
имеется текстовый редактор и нужно чтобы TXT файлы открывались через него "без посредников" (типа OpenDialog).
P.S. Открытие в Tmemo или Richedit.

Заранее благодарен. GoldenSpider
Отправлен: 23.11.2005, 19:12
Вопрос задал: Golden Spider (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Татьяна
Здравствуйте, GoldenSpider!
Не совсем понятно, вы имеете в виду, коммандная строка системы, т.е запускаете ваше приложение из коммандной строки с параметрами или так сказать ваша командная строка (в моем приложении это edit), предлагаю вам оба варианта (см. приложение)
получить данные из коммандной строки
paramstr(index)
индекс 0 - это название вашего приложения
т.е. при открытии проверяется paramstr(1)
кроме этого
если ввести имя файла в Edit1 и нажать энтер, он также загрузится.
Желаю удачи

Приложение:

---------
Нет ничего невозможного!!!

Ответ отправила: Татьяна (статус: 8-ой класс)
Отправлен: 23.11.2005, 19:31
Оценка за ответ: 5
Комментарий оценки:
Именно ParamStr был мне и нужен!!

Отвечает: sir henry
Здравствуйте, GoldenSpider!
Я бы назвал этот вопрос не будничным, а совершенно запутаным.
Вам нужно:
- чтобы текстовый файл открывался в каком-то текстовом редакторе?
- чтобы текстовый файл открывался в Мемо или в RichEdit?
Поясните более внятно. Слово "через" тут совершенно ни к селу, ни к городу.
1. Открытие файла в каком-то текстовом редакторе:
ShellExecute(0, 'open', 'notepad.exe', 'Ваш_файл.txt', NIL, SW_SHOW);
Здесь в качестве "какого-то" текстового редактора выступает виндовый Блокнот. Хотите открыть свой, напишите его вместе с полным путем.
2. Открытие файла в Мемо:
Memo1.Lines.LoadFromFile('Ваш_файл.txt');
В RichEdit'e файл открывается точно так-же.
---------------------------------------------------------------
Может быть Вы что-то иное имели в виду? Пожалуйста поясните, т.к. Ваш вопрос, в том виде в каком Вы его задали, совершенно непонятен.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 23.11.2005, 20:21

Отвечает: Маренич Владимир
Здравствуйте, GoldenSpider!
Не совсем понятно, что Вы имели ввиду "типа OpenDialog", но...
Попробуйте использовать функции ParamCount и ParamStr для доступа к параметрам командной строки.
Ответ отправил: Маренич Владимир (статус: 7-ой класс)
Отправлен: 23.11.2005, 23:11

Отвечает: REFERI
Здравствуйте, GoldenSpider!
Не совсем понятно что именно вы хотите, поэтому если что не так то не обессудьте.
Вам нужно чтобы текстовые файлы открывались "без посредников". Что бы это значило?! Может быть вам не нравиться то что каждый раз выпригивает диалоговое окно где надо долго выбирать путь к файлу, и если захотели открыть другой файл, то надо все это повторять заново? Тогда можно сделать так:
1. Кидаем на форму Memo1, далее с вкладки Win 3.1 DirectoryListBox1, FileListBox1, DriveComboBox1, FilterComboBox1.
2. DirectoryListBox1 св-во FileList выбираем FileListBox1.
DriveComboBox1 св-во DirList выбираем DirectoryListBox1.
FilterComboBox1 св-во FileList выбираем FileListBox1
3. FilterComboBox1 устанавливаем Filter текст *.txt*
4. Теперь FileListBox1 в событии OnCreate пишем
If Fileexists(FileListBox1.FileName) then
Memo1.Lines.LoadFromFile(FileListBox1.FileName);

Теперь при перемещении стрелками по файлам они будут автоматически отображаться в Memo1, можно и в RichEdit.
Удачи!
---------
Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: 7-ой класс)
Отправлен: 23.11.2005, 23:39

Отвечает: Schmak
Здравствуйте, GoldenSpider!
Вопрос конечно не совсем ясный, но как я понял, Вам надо чтобы при запуске Вашей программы с параметром открывался файл, указаный в параметре.
Можете использовать paramcount-кол-во параметров и paramstr(n:integer) параметр номер n. C открытием файла в Memo или RichEdit, я думаю проблем не будет. Например так:
if paramcount>0 then Memo1.Lines.LoadFromFile(paramstr(1))
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 24.11.2005, 05:21

Отвечает: Vadim Vitomsky
Здравствуйте, GoldenSpider!
Для обработки командной строки используется функция ParamStr(index), где индекс указывает индекс аргумента командной строки. Если задать нулевой индекс, функция возвращает имя ехе-файла.
Ответ отправил: Vadim Vitomsky (статус: 3-ий класс)
Отправлен: 24.11.2005, 10:43


Вопрос № 30.099
Здраствуйте!
У меня очень интересный вопрос!
Можно-ли сделать так:
На форме есть обьект Memo, в него вводится код программы написанной на Pascal'e. Надо проверить этот код на правильность,тоесть запустить,ввести данные,проверить результат, и это всё автоматически?!(Программы на Паскале простейшие).Если да,то ваши мысли как!!!
Огромное спасибо!
Отправлен: 23.11.2005, 20:26
Вопрос задал: chikanok (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Маренич Владимир
Здравствуйте, chikanok!
К Вашему сожаленнию, придется "парсить" текст (разбивать на элементарные лексемы), по ним (учитывая синтаксис Паскаля) определенным образом строить набор команд, которые нужно выполнить, потом собственно их выполнить....
На это уйдет (при нормальном владении язком и наличии опыта не один-два года) месяц, другой. Сам такое делал и, к моему удивлению, работало, да и еще нормально :)
Предлагаю использовать библиотеку Innerfuse Pascal Script III (IFPS3), в которой это все уже реализовано. Причем можно интегрировать в Ваши программы в качестве скриптов:
http://www.torry.net/vcl/vcltools/scripts/cajscrpt.zip

Приложение:

Ответ отправил: Маренич Владимир (статус: 7-ой класс)
Отправлен: 23.11.2005, 23:21

Отвечает: REFERI
Здравствуйте, chikanok!
Для того чтобы проберять код программы, написанной на Pascal'e, нужно чтобы компилятор Pascal обработал этот код. Чтобы обработать код все равно придется запускать компилятор и передавать в него текст. То есть мы имеем такую ситуацию теперь нужно запустить программу, передать ей текс-код, а она потом передаст этот код компилятору Pascal'я и все равно будет запускаться окно Pascal'я.
Помоему теперь трудоемкость только возрасла. А мы ведь с вами пишем программы для того чтобы облегчить себе жизнь!
Первый вопрос, который я себе задаю, прежде чем что-то делать - А НАДО ЛИ?!
Но вы задали очень интересный и оригинальный вопрос. Значит в вас есть искра!
Если б у нас был листинг компилятора Pascal, можно было бы что-нибудь замутить!
Но увы! Удачи! Побольше нестандартных мыслей!
---------
Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: 7-ой класс)
Отправлен: 24.11.2005, 00:12

Отвечает: sir henry
Здравствуйте, chikanok!
1. Нужно написать процедуру - синтаксический анализатор. Т.е. проверить все ключевые слова на правильность написания.
2. Написать процедуру - логический анализатор. Т.е. проверять что за чем идет и правильно ли.
3. Запустить на компилирование можно с помощью Shellexecute():
Shellexecute(0, 'open', 'Компилятор_Паскаля_сполным_путем', 'Программа_на_Паскале_с_полным_путем', NIL, SW_SHOW);
4. А что значит "автоматически"? Все действия должны быть четко описаны на этапе проектирования программы, чтобы потом не гадать на кофейной гуще - как кодить и вообще, нужны те или иные действия или не нужны.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 24.11.2005, 05:46


Вопрос № 30.124
В Delphi7 есть компонент WebBrowser на странице "Internet". Я использую его для просмотра HTML файлов в своей программе, он меня устраивал, пока мне ни стало надо сделать контекстный поиск на загруженной странице, т.е. найти введённый пользователем текст на странице и выделить его (как обычный поиск в Internet Explorer). Компонент не позволяет сделать это! Может это можно сделать через WinAPI, но я не знаю как. Подскажите пожалуйста как это сделать?
Отправлен: 24.11.2005, 09:00
Вопрос задал: Lexus (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rusland
Здравствуйте, Lexus!
Если вам нужен стандартный поиск как и в обычном InternetExplorer-e, то он там есть. По нажатию Ctrl+F вызывается стандартный диалог поиска.
---------
Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Практикант)
Отправлен: 24.11.2005, 10:32


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

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

В избранное