Всем дрясте Я опять тут Вот пишу программу и возникла у меня масса вопросов... т.к сильно с делфи я не знаком, в основном на C#, но вот возникла такая потребность.. помогите чем сможете
Вопрос 1: Как запретить растягивать форму, т.е чтобы она была такого же размера как задал я Убрать кнопку развернуть и т.д.
Вопрос 2: Что подскажете насчёт настроек программы... лучше всё записывать в файл, реестр, ини файл и т.д и почему.
Спасибо
BlackShadow
6.05.2004 6:22
1). Запретить растягивать форму - масса способов. Самый простой - установи BorderStyle в bsDialog или bsSingle. 2). А вот тут фишка коварная. Delphi очень любит ini-шки в \Windows или \Windows\system32. Так что лучше указывать ему конкретный путь (легко делается через ParamStr(0), ExtractFilePath и конкатацию строк)... А вообще смотри сам - реестр-то он теряется после переустановки Windows...
Romario
6.05.2004 6:37
BlackShadow 1) А ещё какие способы есть? Именно написать какую-нить функцию и чтоб кнопка РАЗВЕРНУТь была недоступна... 2) Спасибо.. буду думать
Ещё такой вопросик. На главной форме у меня допустим была кнопка, мне понадобилось создать новую форму и я переместил эту кнопку на новую форму, но теперь все остальные функции, ссылаются на то что кнопка и соот-но ф-я теперь недоступны.. как к ней теперь обращаться и соотственно как этой фун-ии обращаться к фун-ям на другой форме. Спасибо
BlackShadow
6.05.2004 6:51
2). В твоих аббр. я нич. не пон.
1). Посмотри в MSHelp доку по SetWindowLong и параметр SWL_STYLE а так же CreateWindow а заодно и CreateWindowEx
trminator
6.05.2004 11:51
У формы есть свойство... склероз, как же называется... BorderIcons. Там выставь biMaximize в false. Все остальные bi* -- по желанию тоже =)
Но как я понял, ты это и так сделал? Тогда еще сделай, как предлагает BlackShadow --
Цитата("BlackShadow")
установи BorderStyle в ... bsSingle
P@sh@
6.05.2004 22:13
Romario Как обращаться к другим формам? Дельфа по умолчанию для каждой новой формы создает отдельный модуль, вот и пропиши в строке uses нового модуля название старого и наоборот... ну и обращайся через имя соответствующего объекта (form1.button1....); а можно все классы в один модуль запихать, только придется ресурсы формы подключать вручную - добавить строчку {$R form2.dfm}, так как *.dfm означает, что подгружаться будет dfm-файл с именем модуля, а вовсе не все dfm-файлы в каталоге... правда запихивать все формы в один модуль стоит только в окончательном варианте, так как дельфа показывает (и дает редактировать) только первую из них
BlackShadow
7.05.2004 0:16
В разделе Implementation Unit'а с Form1 Пишешь что-то типа Uses UnitWithForm2;
А затем спокойно общаешься с ней через ту переменную, которая там объявлена в стиле Var Form2:TForm2;
Romario
7.05.2004 4:51
BlackShadow Спасибо, понял. Но теперь вылетает Access violation at adress ... 2 раза, потом программа запускается, но естевственно работает не правильно
Добавлено (8.05.04 0:47): Не подскажете где можно взять такие же иконки, как на кнопках в ИЕ или Експлорере в ХП? Очень нужно. Спасибо.
BlackShadow
8.05.2004 13:39
Access Violation вылетает потому, что ты спешишь лезть к Form2. Я так понял ты пытаешься сделать это из Form1.OnCreate, а в это время Form2 ещё не создана. Попробуй поченять порядок создания форм в .Dpr.
А иконки можно надыбать легко и просто Image Editor + PrintScreen
Romario
8.05.2004 15:25
Цитата(BlackShadow @ 8.05.04 6:39)
Access Violation вылетает потому, что ты спешишь лезть к Form2. Я так понял ты пытаешься сделать это из Form1.OnCreate, а в это время Form2 ещё не создана. Попробуй поченять порядок создания форм в .Dpr.
А иконки можно надыбать легко и просто Image Editor + PrintScreen
Скорее всего.... Насчёт иконок я имел ввиду готовые ) Может есть у кого или знает где взять.
AlaRic
8.05.2004 15:28
Romario и вам здрасти <_< (извиняюсь за флейм)
Romario
8.05.2004 15:28
BlackShadow Да вроде нет... всё создаёться последовательно..
Если ты из MainForm.OnCreate пытаешься дотянуться до HolidayForm или до FormSettings, а так же из HolidayForm.OnCreate доFormSettings, то ничего тут правильного нет! В этот момент формы ещё не созданы!
Romario
9.05.2004 5:00
BlackShadow только что просмотрел и вроде ты прав.. а как надо тогда сделать? Что в коде подправить?
BlackShadow Пробовал, не получается... Если так, то сначала появляется форма TFormSettings,а у меня главная форма TMainForm. т.е она должна появляться первой, а все остальные при нажатии на кнопки... В модуле главной формы в функции TMainForm.CreateForm(); она действительно обращается к объктам формы TFormSettings...
AlaRic
9.05.2004 16:21
Долго я ждал пока ты изменишь название темы.
BlackShadow
9.05.2004 20:30
А у форм, как и у прочего остального визуального есть св-во Visible. Поставь туда False, и создавай в указанном мною порядке.
Romario
9.05.2004 21:26
BlackShadow Так получаеться что одна форма обращается к другой. Т.е форма настроек создаётся первой и обращается к главной...
Насчёт Visible тоже не понятно... ставлю Visible - False, а она всё равно появляется...
BlackShadow
9.05.2004 23:02
Главная форма появляется ПОЛЮБОМУ. Чтобы спрятать её надо перед созданием форм в .Dpr вставить строку Application.ShowMainForm:=False. А вообще можно вывести все переменные, нужные и там и там за пределы класса формы.
Romario
9.05.2004 23:24
BlackShadow Это понятно, но я не про главную форму. Почему я ставлю False в свой-х а она всё-равно появляеться?
Цитата
А вообще можно вывести все переменные, нужные и там и там за пределы класса формы.
попробую..
BlackShadow
9.05.2004 23:54
Я не догоняю, кто появляется? Если главная форма (настраивается в сво-вах проекта Ctrl-Shift-F11), то её создаёт Application, которому абсолютно фиолетово сво-во Visible формы. Тут Application ориентируется только на своё св-во ShowMainForm.
Romario
10.05.2004 0:13
BlackShadow Объясняю У меня главная форма MainForm (в св-вах проекта), я ставлю последовательность создания форм так как ты мне посоветовал, сначала FormSettings потом MainForm и т.д... На FormSettings ставлю св-во Visible = False, но она всё-равно появляется и мне интересно почему.
BlackShadow
10.05.2004 3:38
Да, только что проверил... Дело в том, что Delphi автоматически меняет Application.MainForm в соответствии с очерёдностью их создания. Вот решение твоей проблемы:
begin Application.Initialize; Application.ShowMainForm:=False; Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm1, Form1); Form1.Show; Application.Run; end.
Проверил. Работает.
Добавлено (9.05.04 22:41): Только не забудь в TForm.OnDestroy добавить Halt, а то программа-то не завершиться, пока Application.MainForm не закроется.
Sir
19.05.2004 22:40
Цитата
Access Violation вылетает потому, что ты спешишь лезть к Form2. Я так понял ты пытаешься сделать это из Form1.OnCreate, а в это время Form2 ещё не создана. Попробуй поченять порядок создания форм в .Dpr.
И не кажется ли вам, что проще тогда перенести нужную процедуру в Form.OnShow(вроде так). Хотя стоп...Какого хр**а можно брать из ещё несозданной формы?Заранее забиваете данные и их потом беретё?)))))))))))))))))))) И не надо сваливать AcessVolation на порядок инициализации!
BlackShadow
20.05.2004 0:14
Sir, согласен. На порядок инициализации действительно не надо. А вот на порядок СОЗДАНИЯ стоит!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.