Всем дрясте Я опять тут
Вот пишу программу и возникла у меня масса вопросов... т.к сильно с делфи я не знаком, в основном на C#, но вот возникла такая потребность.. помогите чем сможете
Вопрос 1:
Как запретить растягивать форму, т.е чтобы она была такого же размера как задал я Убрать кнопку развернуть и т.д.
Вопрос 2:
Что подскажете насчёт настроек программы... лучше всё записывать в файл, реестр, ини файл и т.д и почему.
Спасибо
1). Запретить растягивать форму - масса способов. Самый простой - установи BorderStyle в bsDialog или bsSingle.
2). А вот тут фишка коварная. Delphi очень любит ini-шки в \Windows или \Windows\system32. Так что лучше указывать ему конкретный путь (легко делается через ParamStr(0), ExtractFilePath и конкатацию строк)... А вообще смотри сам - реестр-то он теряется после переустановки Windows...
BlackShadow
1) А ещё какие способы есть? Именно написать какую-нить функцию и чтоб кнопка РАЗВЕРНУТь была недоступна...
2) Спасибо.. буду думать
Ещё такой вопросик.
На главной форме у меня допустим была кнопка, мне понадобилось создать новую форму и я переместил эту кнопку на новую форму, но теперь все остальные функции, ссылаются на то что кнопка и соот-но ф-я теперь недоступны.. как к ней теперь обращаться и соотственно как этой фун-ии обращаться к фун-ям на другой форме. Спасибо
2). В твоих аббр. я нич. не пон.
1). Посмотри в MSHelp доку по SetWindowLong и параметр SWL_STYLE а так же CreateWindow а заодно и CreateWindowEx
У формы есть свойство... склероз, как же называется... BorderIcons. Там выставь biMaximize в false. Все остальные bi* -- по желанию тоже =)
Но как я понял, ты это и так сделал? Тогда еще сделай, как предлагает BlackShadow --
Romario
Как обращаться к другим формам? Дельфа по умолчанию для каждой новой формы создает отдельный модуль, вот и пропиши в строке uses нового модуля название старого и наоборот... ну и обращайся через имя соответствующего объекта (form1.button1....); а можно все классы в один модуль запихать, только придется ресурсы формы подключать вручную - добавить строчку {$R form2.dfm}, так как *.dfm означает, что подгружаться будет dfm-файл с именем модуля, а вовсе не все dfm-файлы в каталоге... правда запихивать все формы в один модуль стоит только в окончательном варианте, так как дельфа показывает (и дает редактировать) только первую из них
В разделе Implementation Unit'а с Form1 Пишешь что-то типа
Uses UnitWithForm2;
А затем спокойно общаешься с ней через ту переменную, которая там объявлена в стиле
Var
Form2:TForm2;
BlackShadow
Спасибо, понял. Но теперь вылетает Access violation at adress ... 2 раза, потом программа запускается, но естевственно работает не правильно
Добавлено (8.05.04 0:47):
Не подскажете где можно взять такие же иконки, как на кнопках в ИЕ или Експлорере в ХП? Очень нужно. Спасибо.
Access Violation вылетает потому, что ты спешишь лезть к Form2. Я так понял ты пытаешься сделать это из Form1.OnCreate, а в это время Form2 ещё не создана. Попробуй поченять порядок создания форм в .Dpr.
А иконки можно надыбать легко и просто Image Editor + PrintScreen
Romario и вам здрасти <_< (извиняюсь за флейм)
BlackShadow
Да вроде нет... всё создаёться последовательно..
Если ты из MainForm.OnCreate пытаешься дотянуться до HolidayForm или до FormSettings, а так же из HolidayForm.OnCreate доFormSettings, то ничего тут правильного нет! В этот момент формы ещё не созданы!
BlackShadow
только что просмотрел и вроде ты прав.. а как надо тогда сделать? Что в коде подправить?
Поменяй порядок создания форм. Например:
Application.CreateForm(TFormSettings, FormSettings);
Application.CreateForm(THolidayForm, HolidayForm);
Application.CreateForm(TMainForm, MainForm);
Application.Run;
BlackShadow
Пробовал, не получается...
Если так, то сначала появляется форма TFormSettings,а у меня главная форма TMainForm. т.е она должна появляться первой, а все остальные при нажатии на кнопки...
В модуле главной формы в функции TMainForm.CreateForm(); она действительно обращается к объктам формы TFormSettings...
Долго я ждал пока ты изменишь название темы.
А у форм, как и у прочего остального визуального есть св-во Visible. Поставь туда False, и создавай в указанном мною порядке.
BlackShadow
Так получаеться что одна форма обращается к другой. Т.е форма настроек создаётся первой и обращается к главной...
Насчёт Visible тоже не понятно... ставлю Visible - False, а она всё равно появляется...
Главная форма появляется ПОЛЮБОМУ. Чтобы спрятать её надо перед созданием форм в .Dpr вставить строку Application.ShowMainForm:=False. А вообще можно вывести все переменные, нужные и там и там за пределы класса формы.
BlackShadow
Это понятно, но я не про главную форму. Почему я ставлю False в свой-х а она всё-равно появляеться?
Я не догоняю, кто появляется? Если главная форма (настраивается в сво-вах проекта Ctrl-Shift-F11), то её создаёт Application, которому абсолютно фиолетово сво-во Visible формы. Тут Application ориентируется только на своё св-во ShowMainForm.
BlackShadow
Объясняю
У меня главная форма MainForm (в св-вах проекта), я ставлю последовательность создания форм так как ты мне посоветовал, сначала FormSettings потом MainForm и т.д... На FormSettings ставлю св-во Visible = False, но она всё-равно появляется и мне интересно почему.
Да, только что проверил... Дело в том, что Delphi автоматически меняет Application.MainForm в соответствии с очерёдностью их создания. Вот решение твоей проблемы:
begin
Application.Initialize;
Application.ShowMainForm:=False;
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1, Form1);
Form1.Show;
Application.Run;
end.
Sir, согласен. На порядок инициализации действительно не надо. А вот на порядок СОЗДАНИЯ стоит!