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

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


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

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

Выпуск № 681
от 16.12.2006, 06:35

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


Вопрос № 66341: Помогите с запуском программы. Код в приложении. При вызове процедуры возникает ошибка: project1.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства и тд. Далее ещё ошибка:"Exception EMCIdeviceError in module proj...
Вопрос № 66345: Возник такой вопрос. Можно ли к одному модулю подключить два файла с одинаковыми ресурсами (оба, скажем, с битмапами)? Как в таком случае узнать, откуда нужно загрузить нужный рисунок?...
Вопрос № 66350: Здравствуйте Эксперты. Дана строка (перевод в Integer не вызывает проблем). Строка находится в Edit.text Она представляет собой число в двоичной СС. Нужно перевести число в ВОСЬМЕРИЧНУЮ (8) СС, при этом нельзя использовать промежуточный перев...
Вопрос № 66363: Уважаемые эксперты, помогите пожалуйста разобраться с двумя вопросами: 1)Есть у меня массив A[1..n] (конец массива n - переменная), но Делфи так компилировать не хотит, выдает - constant expression expected. Как мне сделать так чтобы в программе ...

Вопрос № 66.341
Помогите с запуском программы. Код в приложении. При вызове процедуры возникает ошибка: project1.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства и тд. Далее ещё ошибка:"Exception EMCIdeviceError in module project1.exe at 00077EA0. Данный файл не найден. Проверьте что путь и имя файла указаны верно." Путь точно правильный.
Если перед запуском процедуры выполнить opendialog1.execute и в нём открыть файл project1.exe и после этого выполнить процедуру из приложения то всё работает. project1.exe изменять нельзя, писал его не я.

Приложение:

Отправлен: 10.12.2006, 13:03
Вопрос задал: Kolyan (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: Gladiator
Здравствуйте, Kolyan!
Перед тем, как запускать программу, нужно проверить её существование. С учётом этого в Ваш код нужно добавить:
if FileExists(tr1) then ShellExecute(0,'open',pchar(tr1),nil,nil,sw_show) else
ShowMessage('Файла "'+tr1+'" не существует.')
Ответ отправил: Gladiator (статус: 6-ой класс)
Ответ отправлен: 11.12.2006, 08:21


Вопрос № 66.345
Возник такой вопрос. Можно ли к одному модулю подключить два файла с одинаковыми ресурсами (оба, скажем, с битмапами)? Как в таком случае узнать, откуда нужно загрузить нужный рисунок?
Отправлен: 10.12.2006, 13:42
Вопрос задал: Fynjy_8 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gladiator
Здравствуйте, Fynjy_8!
Не совсем понятно, что вы имеете в виду - dll с ресурсами или файлы *.res?
Но вы же сами программируете и должны знать, где у вас что лежит. У каждого ресурса имеется свой идентификатор, по которому можно его загрузить.
Ответ отправил: Gladiator (статус: 6-ой класс)
Ответ отправлен: 11.12.2006, 08:15

Отвечает: Gh0stik
Здравствуйте, Fynjy_8!

Конечно можно, ведь ресурсы различаются именами, которые Вы задаете самостоятельно.

Приведу пример использования.

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

IMG RCDATA 1.jpg
IMG2 RCDATA 2.jpg


Далее создаем файл ресурсов, используя такую команду: brcc32.exe img.rc.
Файл brcc32.exe - Вы сможете найти в директории с установленным Delphi.

И наконец, применение файла ресурсов в программе:

uses jpeg;// это для работы с JPEG-форматом
........
implementation

{$R *.dfm}
{$R img.RES}

//процедура ДОБЫТИЯ ресурса...

procedure LoadJPEGFromRes(NameJpg:string; ThePicture : TPicture);
var rs:TResourceStream;
JpegImg:TJPEGImage;{uses jpeg}
begin
rs:=TResourceStream.Create(HInstance, NameJpg, RT_RCDATA);
JpegImg:=TJPEGImage.Create;
JpegImg.LoadFromStream(rs);
ThePicture.Assign(JpegImg);
JpegImg.Free;
rs.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
LoadJPEGFromRes('IMG', Image1.Picture);//загружаем картинку из ресурса - обращаемся по имени...
// либо LoadJPEGFromRes('IMG2', Image1.Picture);
end;


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

...........
implementation

{$R *.dfm}
{$R imgres1.RES}
{$R imgres2.RES}


Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 11.12.2006, 12:18


Вопрос № 66.350
Здравствуйте Эксперты.
Дана строка (перевод в Integer не вызывает проблем). Строка находится в Edit.text
Она представляет собой число в двоичной СС. Нужно перевести число в ВОСЬМЕРИЧНУЮ (8) СС, при этом нельзя использовать промежуточный перевод в десятичную(10) СС.
помогите плиз.
Отправлен: 10.12.2006, 14:34
Вопрос задал: Sarymian (статус: 4-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, Sarymian!
Перевод в десятичную систему только усложнит задачу. :)
1. Разбиваете строку на триады, причем начинаете разбивку с конца.
2. Если в последней разбивке до триады не хватает одной или двух позиций, то дополняете нулями до триады.
3. Можно составить массив соответствия двоичного числа восьмеричному:
ar: array[0..7];
ar[1]:='000';
ar[1]:='001';
ar[2]:='010';
ar[3]:='011';
ar[4]:='100';
ar[5]:='101';
ar[6]:='110';
ar[7]:='111';
4. Посылаете каждую триаду в функцию, в которой в цикле проходит поиск в массиве:
Function BinToOct(s: string): string;
Var
i: integer;
Begin
For i:=0 To 7 do
If s=ar[i] Then
Begin
Result:=IntToStr(i);
Break;
End;
End;
5. В главной процедуре теперь только остается конкатенировать возвращаемое из функции и, если нужно, перевести в числовой формат.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 10.12.2006, 17:58
Оценка за ответ: 5
Комментарий оценки:
Отлично. Спс.


Вопрос № 66.363
Уважаемые эксперты, помогите пожалуйста разобраться с двумя вопросами:
1)Есть у меня массив A[1..n] (конец массива n - переменная), но Делфи так компилировать не хотит, выдает - constant expression expected. Как мне сделать так чтобы в программе можно было вводить размерность массива?
2)У какого компонента типа memo или listbox'a можно таким кодом как в приложении выводить строки разных цветов, а то в вышеуказаных компонентах от таких инструкций изменяется цвет всего текста. Или можно ли как-нибудь в эти компоненты выводить разноцветный текст?

Приложение:

Отправлен: 10.12.2006, 16:51
Вопрос задал: Lexx_2k6 (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Писарев, Павел, Юрьевич
Здравствуйте, Lexx_2k6!
Отвечаю на первый вопрос. Чтобы создать массив переменной длины надо использовать динамический массив, а потом уже в программе указывать его длину с помощью процедуры SetLength. Пример описания динамического массива и процедуры SetLength приведён в приложении.

Приложение:

Ответ отправил: Писарев, Павел, Юрьевич (статус: 2-ой класс)
Ответ отправлен: 10.12.2006, 22:17
Оценка за ответ: 5

Отвечает: Gladiator
Здравствуйте, Lexx_2k6!
На второй вопрос отвечаю:
TStringGrid и его событие OnDrawCell, где можно раскрашивать каждую строку любым цветом, в зависимости от содержимого, номера строки и т.д.
Ответ отправил: Gladiator (статус: 6-ой класс)
Ответ отправлен: 11.12.2006, 08:09
Оценка за ответ: 4

Отвечает: KiberZero
Здравствуйте, Lexx_2k6!

Вот пример объявления массива,надеюсь,понятно.

Type

mas=array [1..n] of Integer; //Объявляем массив

var
Form1: TForm1;
a:mas; //Определяем переменную для данных массива
n:Integer; //Вводим переменную для количества строк
implementation

{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var i:Integer; //Индекс элемента
begin
Memo2.Clear; //Очищаем окно
n:=Memo1.Lines.Count; //Определяем количество заполненных //строк
for i:=1 to n do
begin
a[i]:=StrToInt(Memo1.Lines[i-1]); //Заполняем массив
end;
end;

Массив заполнен,а дальше делайте с ним,что надо.

Что касается цвета,воспользуйтесь тем же массивом,присваивая каждой строке свой цвет.

Удачи!
Ответ отправил: KiberZero (статус: 4-ый класс)
Ответ отправлен: 11.12.2006, 21:52

Отвечает: Coupler
Здравствуйте, Lexx_2k6!
Посмотрите вот этот компонент:
http://decoding.narod.ru/download/component/memo/fatpak.zip
Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 12.12.2006, 12:23


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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

В избранное