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

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


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

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

Выпуск № 442
от 13.04.2006, 10:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 302, Экспертов: 66
В номере:Вопросов: 5, Ответов: 10


Вопрос № 39651: Вопрос в следующем. Надо сделать Список (ListBox или ComboBox). Как заранее это сделать в программе - я знаю. (TForm1.ComboBox1.Items.TString - запись строк выбора) А вот как это сделать во время работы программы? Если можно, напи...
Вопрос № 39660: Добрый вечер... Скожите что я делаю не так.... постоянно вылезает "Incompatible types: 'method pointer and regular procedure' " webfile.ru/898252 это ссылка на исходники проэкта.....
Вопрос № 39683: Вопрос по БД. При записи отредактированной записи (простите за тавтологию) делаю запрос на подтверждение в обработчике BeforePost. Возможен ответ "Да", "Нет", "Отмена". С первым и последним проблем нет, а вот в случае &q...
Вопрос № 39684: СРОЧНО!!!!!!!!!!!!!!!!!!!!! Как изменить картинку спрайта при отрисовке, если я сделал в ней изменения. Мне нужно чтобы она выводила измененное изображение, а не исходное. Излбражение типа BMP, хранится в DXImageList. Буду очень признател...
Вопрос № 39705: Здравствуйте! В Delphi 7 возле Caption каждой формы есть значек делфи(такая же иконка у .exe-файлов, созданных им). Подскажите, пожалуйста, как заменить эти иконки на свои? Заранее благодарен!...

Вопрос № 39.651
Вопрос в следующем.
Надо сделать Список (ListBox или ComboBox).
Как заранее это сделать в программе - я знаю.
(TForm1.ComboBox1.Items.TString - запись строк выбора)
А вот как это сделать во время работы программы?
Если можно, напишите коротенький пример записи программы.

Задача значит такая.
Имеется TXT-файл, в нём есть несколько строчек (коротких) вот их и нужно занести в ListBox или ComboBox.
TXT-файл может изменятся в процессе работы программы (изменятся кол-во строк).
Программа динамически должна определять кол-во строчек и заносить их в ListBox или ComboBox (обновлять Список сразу весь).
Пример.
В TXT-файле хранятся формулы (иногда длинные).
Чтение строк из файла - не проблема.
1. Скажите, как их разместить в ListBox или ComboBox програмно?

2. Откуда узнать строчку, которая появляется после выбора (тип String), я не нашёл.
Номер Index'a - 1+Form1.ComboBox1.ItemIndex, это известно (отчёт должен идти с 1).

3. Как обределить строчку которая была введена пользователем в готовой программе в поле ComboBox?
И авто-запись её в Список?

4. Как сохранить обновлённый Список строк (весь) в TXT-файл, построчно?
В смысле, как записать TXT-файл я знаю, а вот откуда эти строчки брать?
Типа,
var Is :String;
BEGIN
Is:=Form1.ComboBox1.StringIndex (что ли? по типу ...ItemIndex). Или как?
END.
Но естественно, такого .StringIndex нету в природе.

Заранее спасибо всем.
Алекс
Отправлен: 07.04.2006, 15:58
Вопрос задал: AlexD (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Ерёмин Андрей
Здравствуйте, AlexD!
Очень много вопросов, постараюсь ответить на некоторые, чтобы было понятно.
Вот так можно создавать TListBox динамически:

procedure TForm1.Button1Click(Sender: TObject);
var L: TListBox;
begin
L:=TListBox.Create(Form1);
L.Parent:=Form1;
L.Left:=100;
L.Top:=30;
L.Width:=200;
L.Height:=300;
L.Visible:=True;
end;


Вот так загрузить в ListBox строки из файла:

ListBox.Items.LoadFromFile('C:debug.txt');


А вот так узнать содержимое строки (в данном случае - 2-ой):

ListBox.Items[2];


А вот это вернёт номер строки, содержащей указанную строку:

ListBox.Items.IndexOf('bla-bla-bla');


Вроде бы, про основные моменты рассказал. Но лучше всё-таки создавать компонент во время разработки, т.к. проблем меньше и многие действия (удаление, например, после завершения программы) выполнятся автоматически.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 07.04.2006, 16:38

Отвечает: Рубан Николай Николаевич
Здравствуйте, AlexD!

Смотри поочередно:
1) добавляем програмно из файла в Combo(Listbox - подобно)

var f:textfile;
s:string;
begin
AssignFile(f,'1.txt');
Reset(f);
while not eof(f) do
begin
readln(f,s);
ComboBox1.Items.Add(s);
end;
ComboBox1.Text:=ComboBox1.Items.Strings[0];
CloseFile(f);
end;

или

ComboBox1.Items.LoadFromFile('1.txt');
ComboBox1.Text:=ComboBox1.Items.Strings[0];

2) Сохраняем построчно весь список
var f:textfile;
i:integer;
begin
AssignFile(f,'2.txt');
Rewrite(f);
for i:=0 to ComboBox1.Items.Count-1 do
Writeln(f,ComboBox1.Items.Strings[i]);
CloseFile(f);
end;

или

ComboBox1.Items.SaveToFile('2.txt');

3)Как обределить строчку которая была введена пользователем в готовой программе в поле ComboBox?

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then {вводим по нажатию Enter в ComboBox1}
begin
ComboBox1.Items.Add(ComboBox1.Text);
end;
end;

Ответ отправил: Рубан Николай Николаевич (статус: 2-ой класс)
Ответ отправлен: 10.04.2006, 11:24


Вопрос № 39.660
Добрый вечер...
Скожите что я делаю не так.... постоянно вылезает "Incompatible types: 'method pointer and regular procedure' "
webfile.ru/898252 это ссылка на исходники проэкта..

Приложение:

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

Отвечает: Boriss
Здравствуйте, DeMON!
Таки он и пишет Вам, что несовместимыые типы:
ожидается указатель на метод объекта (как правило, данного объекта), а получает указатель на обычную (регулярную процедуру)
Причина в различии механизмов вызова метода объекта и процедуры
Самое простое решение проблемы: создаете метод, его туда пишите, а этому методу никто не мешает вызвать любую подпрограмму
---------
Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: факультет Электронной техники, Мордовский госуниверситет
Адрес: г. Саранск
WWW: Программирование на Паскале
----
Ответ отправлен: 07.04.2006, 17:36
Оценка за ответ: 5

Отвечает: Артём Шегеда
Здравствуйте, DeMON!

Внимательно прочти раздел "Procedural types" справки Delphi - там чётко указано отличие между указателем на метод класса и на процедуру:
  A method pointer is really a pair of pointers; the first stores the address of a method,
and the second stores a reference to the object the method belongs to.
Именно поэтому не проходит присвоение указателя на процедуру переменной-указателю на метод OnTimer.
В приложении пример разрешения проблемы. Примечательно то, что если сам объект типа TTimerWrapper не нужен, его и создавать нет необходимости.

Приложение:

Ответ отправил: Артём Шегеда (статус: 5-ый класс)
Ответ отправлен: 07.04.2006, 19:14
Оценка за ответ: 5


Вопрос № 39.683
Вопрос по БД. При записи отредактированной записи (простите за тавтологию) делаю запрос на подтверждение в обработчике BeforePost. Возможен ответ "Да", "Нет", "Отмена". С первым и последним проблем нет, а вот в случае "Нет" хочу: 1. как в случае "Отмена" отменить Post; 2. чтобы DBGrid вышла из режима редактирования (маркер слева от записи опять треугольным стал). Я это сделал кривовато путём программного нажатия кнопки Esq. Хотелось бы сделать "правильно". Спасибо.

Приложение:

Отправлен: 07.04.2006, 22:10
Вопрос задал: Злоумышленник (статус: 5-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Артём Шегеда
Здравствуйте, Злоумышленник!

Попробуй воспользоваться методами самого DataSet:
  ID_CANCEL: begin
      DataSet.Cancel;
      Abort;
    end;
Ответ отправил: Артём Шегеда (статус: 5-ый класс)
Ответ отправлен: 07.04.2006, 23:51
Оценка за ответ: 5
Комментарий оценки:
Попробовал, понравилось.


Вопрос № 39.684
СРОЧНО!!!!!!!!!!!!!!!!!!!!!
Как изменить картинку спрайта при отрисовке, если я сделал в ней изменения. Мне нужно чтобы она выводила измененное изображение, а не исходное.
Излбражение типа BMP, хранится в DXImageList.
Буду очень признателен, если получу ответ.
Отправлен: 07.04.2006, 22:46
Вопрос задал: Konst (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Konst!
Попробуй у спрайта свойству Image присвоить еще раз картинку из DXImageList
Ответ отправил: Устинов Сергей Евгеньевич (статус: 3-ий класс)
Ответ отправлен: 08.04.2006, 00:33
Оценка за ответ: 2
Комментарий оценки:
Думаю, очевидно, что я до этого догадался, но если бы это работало, я бы на задавал вопрос.


Вопрос № 39.705
Здравствуйте! В Delphi 7 возле Caption каждой формы есть значек делфи(такая же иконка у .exe-файлов, созданных им). Подскажите, пожалуйста, как заменить эти иконки на свои? Заранее благодарен!
Отправлен: 08.04.2006, 08:09
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: romodos
Здравствуйте, Андрющенко Вячеслав Васильевич!
Очень просто.
Выбираем меню Project-Options, далее вкладка Application.
Жмем на кнопку Load Icon и загружаем свою иконку.
Все. Надеюсь, разберетесь
---------
The Source is Our Soul. FAQ me off!
Ответ отправил: romodos (статус: Практикант)
Ответ отправлен: 08.04.2006, 08:22
Оценка за ответ: 5

Отвечает: AnD1
Здравствуйте, Андрющенко Вячеслав Васильевич!
И еще в дополнение. У каждой "формы" есть свойство Icon там можно выбрать иконку для каждой формы в отдельности, независимо от иконки приложения
Ответ отправил: AnD1 (статус: 3-ий класс)
Ответ отправлен: 08.04.2006, 09:36

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Андрющенко Вячеслав Васильевич!
Я знаю два метода: первый - Project ->Options -> Application -> Load Icon
(таким методом изменяется иконка для всего приложения (включая иконку приложения на панели задач, а также все иконки у окон, если они не выставлены дополнительно))
Второй: у каждой фомы есть свойство Icon. Тут можно присвоить каждой форме свою иконку, причем приоритет этого присвоения выше, чем приоритет первого метода.
Ответ отправил: Устинов Сергей Евгеньевич (статус: 3-ий класс)
Ответ отправлен: 08.04.2006, 14:41

Отвечает: Diman_A
Здравствуйте, Андрющенко Вячеслав Васильевич!
Ну и в дополнение к ответам предыдущих экспертов: можно любым редактором ресурсов (напр. Restorator) можно изменить иконку приложения, и тогда и возле caption будет появляться другая иконка (та, которую вы поставили).
Ответ отправил: Diman_A (статус: 8-ой класс)
Ответ отправлен: 08.04.2006, 17:04


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.30 (beta) от 09.04.2006
Яндекс Rambler's Top100

В избранное