Помощь - Поиск - Пользователи - Календарь
Полная версия: Написание программы...
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Romario
Всем дрясте smile.gif Я опять тут smile.gif
Вот пишу программу и возникла у меня масса вопросов... т.к сильно с делфи я не знаком, в основном на C#, но вот возникла такая потребность.. помогите чем сможете smile.gif

Вопрос 1:
Как запретить растягивать форму, т.е чтобы она была такого же размера как задал я smile.gif Убрать кнопку развернуть и т.д.

Вопрос 2:
Что подскажете насчёт настроек программы... лучше всё записывать в файл, реестр, ини файл и т.д и почему.

Спасибо
BlackShadow
1). Запретить растягивать форму - масса способов. Самый простой - установи BorderStyle в bsDialog или bsSingle.
2). А вот тут фишка коварная. Delphi очень любит ini-шки в \Windows или \Windows\system32. Так что лучше указывать ему конкретный путь (легко делается через ParamStr(0), ExtractFilePath и конкатацию строк)... А вообще смотри сам - реестр-то он теряется после переустановки Windows...
Romario
BlackShadow
1) А ещё какие способы есть? Именно написать какую-нить функцию и чтоб кнопка РАЗВЕРНУТь была недоступна...
2) Спасибо.. буду думать

Ещё такой вопросик.
На главной форме у меня допустим была кнопка, мне понадобилось создать новую форму и я переместил эту кнопку на новую форму, но теперь все остальные функции, ссылаются на то что кнопка и соот-но ф-я теперь недоступны.. как к ней теперь обращаться и соотственно как этой фун-ии обращаться к фун-ям на другой форме. Спасибо
BlackShadow
2). В твоих аббр. я нич. не пон.

1). Посмотри в MSHelp доку по SetWindowLong и параметр SWL_STYLE а так же CreateWindow а заодно и CreateWindowEx
trminator
У формы есть свойство... склероз, как же называется... BorderIcons. Там выставь biMaximize в false. Все остальные bi* -- по желанию тоже =)

Но как я понял, ты это и так сделал? Тогда еще сделай, как предлагает BlackShadow --
Цитата("BlackShadow")
установи BorderStyle в ... bsSingle
P@sh@
Romario
Как обращаться к другим формам? Дельфа по умолчанию для каждой новой формы создает отдельный модуль, вот и пропиши в строке uses нового модуля название старого и наоборот... ну и обращайся через имя соответствующего объекта (form1.button1....); а можно все классы в один модуль запихать, только придется ресурсы формы подключать вручную - добавить строчку {$R form2.dfm}, так как *.dfm означает, что подгружаться будет dfm-файл с именем модуля, а вовсе не все dfm-файлы в каталоге... правда запихивать все формы в один модуль стоит только в окончательном варианте, так как дельфа показывает (и дает редактировать) только первую из них
BlackShadow
В разделе Implementation Unit'а с Form1 Пишешь что-то типа
Uses UnitWithForm2;

А затем спокойно общаешься с ней через ту переменную, которая там объявлена в стиле
Var
Form2:TForm2;
Romario
BlackShadow
Спасибо, понял. Но теперь вылетает Access violation at adress ... 2 раза, потом программа запускается, но естевственно работает не правильно sad.gif

Добавлено (8.05.04 0:47):
Не подскажете где можно взять такие же иконки, как на кнопках в ИЕ или Експлорере в ХП? Очень нужно. Спасибо.
BlackShadow
Access Violation вылетает потому, что ты спешишь лезть к Form2. Я так понял ты пытаешься сделать это из Form1.OnCreate, а в это время Form2 ещё не создана. Попробуй поченять порядок создания форм в .Dpr.

А иконки можно надыбать легко и просто Image Editor + PrintScreen smile.gif
Romario
Цитата(BlackShadow @ 8.05.04 6:39)
Access Violation вылетает потому, что ты спешишь лезть к Form2. Я так понял ты пытаешься сделать это из Form1.OnCreate, а в это время Form2 ещё не создана. Попробуй поченять порядок создания форм в .Dpr.

А иконки можно надыбать легко и просто Image Editor + PrintScreen smile.gif

Скорее всего....
Насчёт иконок я имел ввиду готовые ) Может есть у кого или знает где взять.
AlaRic
Romario и вам здрасти <_< (извиняюсь за флейм)
Romario
BlackShadow
Да вроде нет... всё создаёться последовательно..

Код
Application.CreateForm(TMainForm, MainForm);
 Application.CreateForm(THolidayForm, HolidayForm);
 Application.CreateForm(TFormSettings, FormSettings);
 Application.Run;
BlackShadow
Если ты из MainForm.OnCreate пытаешься дотянуться до HolidayForm или до FormSettings, а так же из HolidayForm.OnCreate доFormSettings, то ничего тут правильного нет! В этот момент формы ещё не созданы!
Romario
BlackShadow
только что просмотрел и вроде ты прав.. а как надо тогда сделать? Что в коде подправить?
BlackShadow
Поменяй порядок создания форм. Например:
 Application.CreateForm(TFormSettings, FormSettings);
Application.CreateForm(THolidayForm, HolidayForm);
Application.CreateForm(TMainForm, MainForm);
Application.Run;
Romario
BlackShadow
Пробовал, не получается...
Если так, то сначала появляется форма TFormSettings,а у меня главная форма TMainForm. т.е она должна появляться первой, а все остальные при нажатии на кнопки...
В модуле главной формы в функции TMainForm.CreateForm(); она действительно обращается к объктам формы TFormSettings...
AlaRic
Долго я ждал пока ты изменишь название темы.
BlackShadow
А у форм, как и у прочего остального визуального есть св-во Visible. Поставь туда False, и создавай в указанном мною порядке.
Romario
BlackShadow
Так получаеться что одна форма обращается к другой. Т.е форма настроек создаётся первой и обращается к главной...

Насчёт Visible тоже не понятно... ставлю Visible - False, а она всё равно появляется...
BlackShadow
Главная форма появляется ПОЛЮБОМУ. Чтобы спрятать её надо перед созданием форм в .Dpr вставить строку Application.ShowMainForm:=False. А вообще можно вывести все переменные, нужные и там и там за пределы класса формы.
Romario
BlackShadow
Это понятно, но я не про главную форму. Почему я ставлю False в свой-х а она всё-равно появляеться? smile.gif

Цитата
А вообще можно вывести все переменные, нужные и там и там за пределы класса формы.

попробую..
BlackShadow
Я не догоняю, кто появляется? Если главная форма (настраивается в сво-вах проекта Ctrl-Shift-F11), то её создаёт Application, которому абсолютно фиолетово сво-во Visible формы. Тут Application ориентируется только на своё св-во ShowMainForm.
Romario
BlackShadow
Объясняю smile.gif
У меня главная форма MainForm (в св-вах проекта), я ставлю последовательность создания форм так как ты мне посоветовал, сначала FormSettings потом MainForm и т.д... На FormSettings ставлю св-во Visible = False, но она всё-равно появляется и мне интересно почему.
BlackShadow
Да, только что проверил... Дело в том, что 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
Цитата
Access Violation вылетает потому, что ты спешишь лезть к Form2. Я так понял ты пытаешься сделать это из Form1.OnCreate, а в это время Form2 ещё не создана. Попробуй поченять порядок создания форм в .Dpr.

И не кажется ли вам, что проще тогда перенести нужную процедуру в Form.OnShow(вроде так).
Хотя стоп...Какого хр**а можно брать из ещё несозданной формы?Заранее забиваете данные и их потом беретё?))))))))))))))))))))
И не надо сваливать AcessVolation на порядок инициализации!
BlackShadow
Sir, согласен. На порядок инициализации действительно не надо. А вот на порядок СОЗДАНИЯ стоит!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.