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

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


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

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

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

Выпуск № 342
от 01.01.2006, 21:48

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


Вопрос № 32255: Здравствуйте уважаемые эксперты... Просьба помочь - цель отобразить в окне миниатюры файлов, но я не знаю заранее сколько их будет... Поэтому пытаюсь в рантайме создавать TImage. Создаваться он создается, но картинок я не вижу.. Чт...
Вопрос № 32281: Ув. эксперты как зделать что бы во время введения даних допустим в DBEdit автоматически выводились похожие существующие даные, как в Excel, Access...
Вопрос № 32287: Здраствуй народ. С наступившими и наступающими новогодними и рождественскими праздниками. Работаю с Delphi 7. Вопрос вот в чем: с недавних пор не возможно прописать в прграмме Application.Title := 'Программа' programm Prog; uses Fo...
Вопрос № 32291: Еще раз добрый вечер.. Возник вопрос - как программа может удалить себя ПОЛНОСТЬЮ? Трюк с переименованием я знаю.. а вариант прописывания в реестр в RunOnce не устраивает так как требует перезагрузки. В DelphiWorld 6 нашел процедуру...(она в ...

Вопрос № 32.255
Здравствуйте уважаемые эксперты...
Просьба помочь - цель отобразить в окне миниатюры файлов,
но я не знаю заранее сколько их будет... Поэтому пытаюсь
в рантайме создавать TImage. Создаваться он создается, но
картинок я не вижу.. Что я делаю не так?

В прилагаемом коде Image1 просто кинут на форму и работает а
вот остальные - нет. И еще попутно - созданные объекты удалятся
при удалении Form4 или это нужно где нить прописать Image[i].Destroy?

Приложение:

Отправлен: 26.12.2005, 23:21
Вопрос задал: Болотов Сергей (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Schmak
Здравствуйте, Болотов Сергей!
Вы не указали кому будет принадлежать новый объект, поэтому он и не появился.
...
Image[i]:=TImage.Create(Form4);
Image[i].Parent:=Form4;
...
И ещё в Вашем коде получается. что в Image1 прогружается каждый рисунок, но как я понял это всего лишь для отладки. Кстати с задаваемыми свойствами тоже явный перебор. Если вы устанавливаете Stretch:=true то рисунок будет вписан в рамку без соблюдения пропорций, т.е свойства proportional и center сбросятся в False. Свойства Visible и Enabled нет смысла устнавливать в True, т.к это их значение по умолчанию. В итоге код можно сократить так, как представлено в приложении.

2) При закрытии программа очищает всё занятое ею место в оперативной памяти, но если вы уничтожаете форму во время работы программы, то не помешает прописать в собатии формы OnDestroy уничтожение Imageв.

Приложение:

---------
Не всё то Windows, что висит!

Ответ отправил: Schmak (статус: Студент)
Отправлен: 27.12.2005, 06:09
Оценка за ответ: 5
Комментарий оценки:
Спасибо.. ответ полный! Хотя я уже догадался поставить свойство Parent - работает!

Отвечает: Ерёмин Андрей
Здравствуйте, Болотов Сергей!
1) Что за странная конструкция: If i=0 then else begin ? В этом случае нужно написать: if i<>0 then begin.
2) По поводу изображений - попробуйте добавить следующее: Image[i].Parent:=Form4; Должно помочь.
3) По поводу удаления - желательно это делать, хотя и не обязательно. Как правило, при удалении формы её объекты также удаляются.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 27.12.2005, 07:38

Отвечает: Ataman N. N.
Здравствуйте, Болотов Сергей!
После Image[i]:=TImage.Create(Form4); напишите
Image[i].Parent := Form4;
Ответ отправил: Ataman N. N. (статус: 4-ый класс)
Отправлен: 27.12.2005, 13:32


Вопрос № 32.281
Ув. эксперты как зделать что бы во время введения даних допустим в DBEdit автоматически выводились похожие существующие даные, как в Excel, Access
Отправлен: 27.12.2005, 15:19
Вопрос задал: Unnamed (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: LanK
Здравствуйте, Unnamed!

Купить книжку по Delphi - Базы Данных :)

Практически у всех копмонентов с полем ввода есть событие OnChange.

Туда и поместите обработчик - если поле изменилось - выполнить запрос - вывести информацию в другие.
---------
Пусть все будет хорошо! Давайте жить дружно! :) И будет жить еще лучше!
Ответ отправил: LanK (статус: 3-ий класс)
Отправлен: 28.12.2005, 12:39


Вопрос № 32.287
Здраствуй народ. С наступившими и наступающими новогодними и рождественскими праздниками. Работаю с Delphi 7. Вопрос вот в чем: с недавних пор не возможно прописать в прграмме Application.Title := 'Программа'

programm Prog;
uses
Forms;
MyUnit in 'MyUnit.pas' {MyForm};
{$R *.res}
begin
Application.Init;
Application.Title := 'Программа';
Application.CreateForm(TMyForm, MyForm);
Application.Run;
end;

Т.е. когда я пишу Application.Title пропадает возможность запуска программы, а если я всеже сохраню текст программы в виде (см. выше), при загрузке этого же проекта заново выдается ошибка: Error in modeule: Call to Application.CreateForm is missing or incorrect.
Может кто знает что могло поменяться и куда глянуть?
Отправлен: 27.12.2005, 17:12
Вопрос задал: Карасев Алексей Александрович (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: sir henry
Здравствуйте, Карасев Алексей Александрович!
А с каких пор это появилось? Вспомните, что Вы делали.
Попробуйте тоже самое сделать по другому: в меню Project -> Options -> Application, там есть поле Title.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 27.12.2005, 17:38

Отвечает: Лучников Юрий Владимирович
Здравствуйте, Карасев Алексей Александрович!
Неплохо было бы в вопросе указать версию компилятора...

Приведенный код в приложении работает на ура... Компилятор Delphi 7

Приложение:

Ответ отправил: Лучников Юрий Владимирович (статус: 7-ой класс)
Отправлен: 27.12.2005, 17:40

Отвечает: Архангельский Андрей Германович
Здравствуйте, Карасев Алексей Александрович!

Попробуй так:

Application.Initialize; <<<------ так должно быть
Application.Title := 'Программа';
Application.CreateForm(TMyForm, MyForm);
Application.Run;

У тебя не выполняется процедура инициализации, отсуда все проблемы
Ответ отправил: Архангельский Андрей Германович (статус: Студент)
Отправлен: 27.12.2005, 17:46

Отвечает: Ерёмин Андрей
Здравствуйте, Карасев Алексей Александрович!
Хм. Но в этом коде много ошибок. Не понимаю, как он вообще мог скомпилироваться...
Во-первых, почему в слове "program" две буквы "m" на конце? Во-вторых, что за метод такой - Init? Кто его изобрёл? Существует только метод Initialize. Наконец-то, указанная вами ошибка указывает не на строку с Init, а на следующую - с CreateForm. Проверьте, что реальные имя формы и название модуля совпадают с написанными в модуле проекта. А вот код, который должен получиться и прекрасно работает:

program Prog;
uses
Forms,
Myunit in 'MyUnit.pas' {MyForm};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Программа';
Application.CreateForm(TMyForm, MyForm);
Application.Run;
end.


---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 28.12.2005, 21:58


Вопрос № 32.291
Еще раз добрый вечер..
Возник вопрос - как программа может удалить себя ПОЛНОСТЬЮ? Трюк с переименованием я знаю.. а вариант прописывания в реестр в RunOnce не устраивает так как требует перезагрузки.
В DelphiWorld 6 нашел процедуру...(она в приложении), однако она почему то не работает на под ИДЕ ни отдельно..
Подскажите пожалуйста!! Может можно какой нить временный скрипт использовать??

Приложение:

Отправлен: 27.12.2005, 18:04
Вопрос задал: Болотов Сергей (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лучников Юрий Владимирович
Здравствуйте, Болотов Сергей!

В запущенное приложение в Windows, пока оно запущено, невозможно произвести запись (в сам *.exe файл).
Ответ отправил: Лучников Юрий Владимирович (статус: 7-ой класс)
Отправлен: 27.12.2005, 18:20
Оценка за ответ: 2
Комментарий оценки:
этого никто и не требует.. тем не менее есть же программы которые себя обновляют и удаляют... мне нужен обходной путь

Отвечает: Brutaller
Здравствуйте, Болотов Сергей!
В коде, который в вашем приложении есть ошибки.
Уберите все слэши "" и всё будет работать.
С ними ничего даже не компилируется.
Есть еще пару вариантов самоудаления (см. приложение).
Источник примеров http://delphiworld.narod.ru/
Все прекрасно работает, лично сам проверил.

Приложение:

Ответ отправил: Brutaller (статус: 1-ый класс)
Отправлен: 27.12.2005, 21:13

Отвечает: Ерёмин Андрей
Здравствуйте, Болотов Сергей!
Попробуйте вот такой способ (взято из DRKB):


uses
Windows, SysUtils;

procedure DeleteMe;
var
BatchFile: TextFile;
BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
{ создаём бат-файл в директории приложения }
BatchFileName := ExtractFilePath(ParamStr(0)) + '$$336699.bat';

{ открываем и записываем в файл }
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);

Writeln(BatchFile, ':try');
Writeln(BatchFile, 'del "' + ParamStr(0) + '"');
Writeln(BatchFile,
'if exist "' + ParamStr(0) + '"' + ' goto try');
Writeln(BatchFile, 'del "' + BatchFileName + '"');
CloseFile(BatchFile);

FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;

if CreateProcess(nil, PChar(BatchFileName), nil, nil,
False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;

end;



Эта процедура создаёт временной bat-файл в каталоге приложения, запускает его на исполнение и закрывает приложение. Батник будет работать до тех пор, пока не удалится exe-файл нашей программы, после чего удалит сам себя.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 28.12.2005, 22:38
Оценка за ответ: 4
Комментарий оценки:
Спасибо за этот и предыдущий ответ! Правда работает.. только имена пришлось короткие прописывать.. А вот почему у меня не работает описанный мною способ? Впрочем.. не важно.. этот же работает ;-)

Отвечает: Ataman N. N.
Здравствуйте, Болотов Сергей!
Есть еще трюк с созданием bat-файла. При заверешении программы создаете и запускаете bat-файл, который удаляет и программу и сам себя.
Ответ отправил: Ataman N. N. (статус: 4-ый класс)
Отправлен: 29.12.2005, 21:32


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100

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

В избранное