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

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


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


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

Выпуск № 114
от 17.12.2002, 19:10

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 364
Отправлено ответов: 694
Активность: 190.6 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Артём
Статус: Начальный
Общий рейтинг: 300
[Подробней >>]
Idle Sign
Статус: Опытный
Общий рейтинг: 148.53
URL: Blind Team
[Подробней >>]
Vadim
Статус: Доверительный
Общий рейтинг: 145.45
[Подробней >>]
 
Melkor
Статус: Доверительный
Общий рейтинг: 133.33
[Подробней >>]
Jadd
Статус: Профессиональный
Общий рейтинг: 144.89
[Подробней >>]
toshka
Статус: Начальный
Общий рейтинг: 112.98
[Подробней >>]
 
Pinman
Статус: Опытный
Общий рейтинг: 138.5
URL: Программирование и заработок
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 346. Записал строковую переменную в конец каждой строки файла: st.q1 st.q2 st.org_name 100 200 ор... (ответов: 2)
Вопрос № 347. Привет! Народ, помогите! Пишу редактор WAD-файлов(кто не знает - DOOMовские файлы ресурсов), не полу... (ответов: 4)
Вопрос № 348. Приветствую вас эксперты. Такое дело, необходимо из программы запустить свойства "Мой компьютер... (ответов: 1)
Вопрос № 349. Доброго времени суток всем экспертам! Подскажите пожауйста, как работая с документом Excell в дельфи... (ответов: 1)
Вопрос № 350. Здарова экспертам. Помогите начать, ну всмысле хочу написать самую простую прогу на самом простом яз... (ответов: 4)

Вопросов: 5, ответов: 12


 Вопрос № 346

Записал строковую переменную в конец каждой строки файла:
st.q1 st.q2 st.org_name
100 200 орагнизация1
200 210 орагнизация2
...


Begin
Reset(F1); //открываю файл для чтения
Read(F1,???); //Здесь я должен прочитать из файла строковую переменную. Что мне нужно написать //вместо вопросов?
while not EOLN do //
begin
if st.org_name='RUS' then //И если она(строковая переменная) равно 'RUS', то изменить Caption у GroupBox2.
GroupBox2.Caption:='text';
CloseFile(F1);
end;
end;



Вопрос отправлен: 13.12.2002, 06:15
Отправитель: Tik (shal@gorodok.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Артём

Добрый день, Tik!

Вместо вопросов нужно писать программы :) - шютка.
Пиши так:

while not EOF(F1) do //
begin
ReadLn(F1, st.q1, st.q2, st.org_name);
if st.org_name='RUS' then //И если она(строковая переменная) равно 'RUS', то изменить Caption у GroupBox2.
GroupBox2.Caption:='text';
end;
CloseFile(F1);



Ответ отправлен: 13.12.2002, 11:46
Отправитель: Артём


Отвечает Idle Sign

Добрый день, Tik!
===== Pro bono publico, no bloody panico! =====
Если файл задан как тестовой, используй ReadLn. В любом случае вместо вопросов подставляется переменная(ые), в которую будет происходить считывание. Read будет читать по одному символу, ReadLn строку. Теперь пишешь процедуру парсинга (отсекаешь ненужные начальные циферки), и то что у тебя от строки осталось сравниваешь.

Ответ отправлен: 13.12.2002, 12:13
Отправитель: Idle Sign


 Вопрос № 347

Привет!
Народ, помогите! Пишу редактор WAD-файлов(кто не знает - DOOMовские файлы ресурсов), не получаются самые элементарные вещи :( Очень надеюсь на вашу помощь.
1) Пробовал создать динамический массив и потом загрузить в него файл через Blockread:
Data : array of byte;
f : File of byte;
...
assignfile(f,'..zdoom2.wad');reset(f);
WadSize := FileSize(F);
blockread(F,data,Wadsize);
closefile(f);

Но не работает, пишет "Access violation...". Вероятно это от того, что массив Data в памяти распологается не одним куском, а по частям. Можно как-нибудь заставить его выделить память куском?
2) Вот есть у меня массив 20000001 элемента(не динамический). Мне надо начиная с некоторого элемента номер x сдвинуть массив влево или вправо на y. Я пытался сделать это так:
out1,out2 : pointer;
data : array[0..20000000] of byte;
...
Out1 := ptr(integer(addr(Data))+x);
Out2 := ptr(integer(addr(Data))+x+y);
Out2^ := Out1^;

Но это, как и ожидалось, не сработало. Причем Out1 и Out2 получают правильные адреса. Пытался использовать PChar, но там копирует до первого нуля. Есть ли какая-нибудь процедура, чтобы сделать это? Побайтовый проход через For не подойдет - слишком медленно.
Заранее спасибо всем, кто ответит!



Вопрос отправлен: 13.12.2002, 21:05
Отправитель: Necro

[Следующий вопрос >>] [Список вопросов]

Отвечает Vadim

Здравствуйте, Necro!
1. Перед BlockRead, ты забыл выделить память массиву Data:
SetLength(Data, WadSize);
а то ты объявил динамический массив, а размера у него нет, данные помещать некуда.
2. И не будет работать, потому-что ты получаеш адрес, а потом прибавляешь к адресу х(у), т.е. в результате получаешь указатель неизвестно на что.
Представь, что твой знакомый проживает по адресу: Красная площадь, дом 1. От того, что ты прибавишь к адресу 1 или 2, твой знакомый не очутится ни в доме №2, ни в дом №3. Его для этого нужно физически переместить.
Поскольку через For нельзя, предлагать решение не буду. Обратись к экспертам по асм'у, скорость выполнения - это их преррогатива.


Ответ отправлен: 15.12.2002, 06:14
Отправитель: Vadim


Отвечает Melkor

Здравствуйте, Necro!
1)Попробуй создать указатель и проинициализировать его нужным размером (см. приложение).
2)Может помочь функция WinAPI, кот. перемещает блок памяти:
MoveMemory(Dest: Pointer; Source: Pointer; Length: DWord);
Dest - куда копировать
Source - откуда копировать
Length - длинна в байтах

Приложение:

Ответ отправлен: 14.12.2002, 02:02
Отправитель: Melkor


Отвечает Jadd

Добрый день, Necro!
1)Ты ерунду пишешь. Ерунда в том месте, где говорится про какие-то куски в памяти. Ошибка вываливается абсолютно правильно. То, чно у тебя написано(в проге), говорит об ОБЪЯВЛЕНИИ динамического массива. Но!!! Его надо разместить в памяти, т.е. выделить ровно столько памяти, сколько требуется для размещения там массива. Значит, надо определить размер массива. для этого есть в дельфях функция SetSize (по-моему так). Читай внимательно хелп в дельфях, особенно тот раздел, где говорится про динамические массивы.
А еще неплохо было бы прочитать тебе про адрессацию и прочую организацию памяти в компе, а так же про управление памятью в винде. Просто СРОЧНО!
2)Ты хочешь, чтобы нашелся метод для сдвига блока памяти размером около 20-ти МЕГА? Причем быстро? Так не бывает. Пиши for и не морочь никому голову. И еще. Не стоит использовать такие блоки памяти в работе - это неоправдано. Прими это как совет опытного программера с многолетним стажем. Задач с такими требованиями в природе просто нет! К тому же, приведенный кусок кода имеет недостатки и не выполняет целиком поставленной задачи.

Ответ отправлен: 15.12.2002, 03:38
Отправитель: Jadd


Отвечает toshka

Здравствуйте, Necro!
>> WadSize := FileSize(F);
Тут надо вставить:
SetLength(data, WADSize); // т.к. динамический массив изначально не имеет размера
>> blockread(F,data[0],Wadsize); // Надо читать данные ИМЕННО в data[0], поскольку data - это УКАЗАТЕЛЬ на массив
Чтобы сдвинуть массив, надо использовать следующую конструкцию:
Move(data[x], data[x+y], 1000) // Перенос с позиции X на смещение Y, 1000 элементов массива

Ответ отправлен: 15.12.2002, 09:53
Отправитель: toshka


 Вопрос № 348

Приветствую вас эксперты.
Такое дело, необходимо из программы запустить свойства "Мой компьютер", закладка "Оборудование", и вообще где надыбать как запускать другие Виндовские прибамбасы :)?
Ответьте подробнее, очень надо!!



Вопрос отправлен: 13.12.2002, 23:22
Отправитель: Iv

[Следующий вопрос >>] [Список вопросов]

Отвечает toshka

Здравствуйте, Iv!
Что ты понимаешь под понятием "Виндозовские прибамбасы" ?

Ответ отправлен: 15.12.2002, 09:55
Отправитель: toshka


 Вопрос № 349

Доброго времени суток всем экспертам!
Подскажите пожауйста, как работая с документом Excell в дельфи можно обратиться к конкретной ячейке таблицы.
Спасибо!



Вопрос отправлен: 14.12.2002, 11:08
Отправитель: Pervert

[Следующий вопрос >>] [Список вопросов]

Отвечает Vadim

Здравствуйте, Pervert!
Можно натаскать компонентов с панели инструментов Delphi. Начиная, по-моему, с 5 версии, в Delphi есть компоненты для всего офиса (ворд, ексель и т.д.). Для начала это, пожалуй, будет лучше всего, т.к. Delphi тебя будет обеспечивать подсказкой, какие методы и свойства у них есть, а каких нету.
Можно писать все вручную, что-то типа:
var
ExApp: Variant;
begin
ExApp:=CreateOLEObject('Excel.Application');
...
ExApp.WorkBook.Range('A1:D10').Cell(1,1).Value:='Что тебе надо занести в ячейку';
и далее работаешь как с обычными классами. Но надо, чтобы под рукой была справка по VBA (из офиса).


Ответ отправлен: 15.12.2002, 08:54
Отправитель: Vadim


 Вопрос № 350

Здарова экспертам. Помогите начать, ну всмысле хочу написать самую простую прогу на самом простом языке (все делают и ...) Я в этом деле полный ламер. Слышал тока что delphi типа "любительский". Мож чо почитать (всмысле не книжку а напр file.pdf...) или посмотреть



Вопрос отправлен: 14.12.2002, 12:21
Отправитель: Dr.M()rG

[Следующий вопрос >>] [Список вопросов]

Отвечает Vadim

Добрый день, Dr.M()rG!
По-моему, лучше все-таки книжку. Пока еще не все сознательные граждане приобрели компутер с двумя мониторами, поэтому с книжкой удобнее :)).
Можно заглянуть на сайт delphi.mastak.ru, там куча статеек по всяким вопросам, куча ссылок, примеров и т.д.
Можно зайти на soobcha.ru/rushelp, там как раз есть статейка для начинающих и всякие примеры.

Ответ отправлен: 15.12.2002, 09:05
Отправитель: Vadim


Отвечает Idle Sign

Доброе время суток, Dr.M()rG!
===== Pro bono publico, no bloody panico! =====
"Типа "любительский"? Ну, да на любителя. Я, к примеру, "люблю его сваренным в супе" (©Высоцкий). Ерудну ты слышал, Дельфя на столько же любительская, на сколько таковым является С++.
Помочь могу. Кидаешь на форму кнопку, кликаешь по ней два раза, пишешь (копируешь)
ShowMessage('Hello, world!");
далее жмешь F9 и любуешься. Считай это своей первой программой.
Любитель почитать с монитора? Ну так вперед - встроенная справка Дэльфи, плюс куча информации в сети (в поисковик залезь)- э на счет почитать, а посмотреть - можно тут. ;)

Ответ отправлен: 14.12.2002, 14:23
Отправитель: Idle Sign


Отвечает Pinman

Здравствуйте, Dr.M()rG!
На мой взгляд самый простой язык - Visual Basic. Делфи вовсе не любительский язык - на нем пишутся и профессиональные приложения. Все доло в руках программиста. А насчет докумов - лезь в любой поисковик и пиши Delphi.
Изучай, пиши, совершенствуй . . .

Ответ отправлен: 14.12.2002, 20:43
Отправитель: Pinman


Отвечает Melkor

Добрый день, Dr.M()rG!
На самом деле Delphi не любительский язык, если нужен простой язык - пиши на каком-нидудь Microsoft Visual Basik или что-нибудь в этом роде. А про Delphi можешь почитать на каком-нибудь сайте (напр. http://delphi.mastak.ru/).

Ответ отправлен: 15.12.2002, 01:46
Отправитель: Melkor



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (40)
C / C++ (31)
Perl (6)
Delphi (23)
Pascal (25)
Basic / VBA (12)
Java / JavaScript (9)
PHP (5)
MySQL / MSSQL (7)
Пользователю
Windows 95/98/Me (36)
Windows NT/2000/XP (27)
"Железо" (35)
Поиск информации (15)
Администратору
Windows NT/2000/XP (11)
Linux / Unix (16)
Юристу
Гражданское право (10)
Семейное право (3)
Трудовое право (6)
КоАП (3)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное