Вопрос № 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?
Отвечает: 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.
Может кто знает что могло поменяться и куда глянуть?
Отвечает: sir henry
Здравствуйте, Карасев Алексей Александрович!
А с каких пор это появилось? Вспомните, что Вы делали.
Попробуйте тоже самое сделать по другому: в меню Project -> Options -> Application, там есть поле Title.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 27.12.2005, 17:38
Отвечает: Лучников Юрий Владимирович
Здравствуйте, Карасев Алексей Александрович!
Неплохо было бы в вопросе указать версию компилятора...
Приведенный код в приложении работает на ура... Компилятор Delphi 7
Отвечает: Ерёмин Андрей
Здравствуйте, Карасев Алексей Александрович!
Хм. Но в этом коде много ошибок. Не понимаю, как он вообще мог скомпилироваться...
Во-первых, почему в слове "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 нашел процедуру...(она в приложении), однако она почему то не работает на под ИДЕ ни отдельно..
Подскажите пожалуйста!! Может можно какой нить временный скрипт использовать??
Отвечает: Лучников Юрий Владимирович
Здравствуйте, Болотов Сергей!
В запущенное приложение в 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);
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