Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


ћетодические указани€. 1. ћногострочные окна редактировани€ Memo (страница Standart) и RichEdit (страница Win32)




1. ћногострочные окна редактировани€ Memo (страница Standart) и RichEdit (страница Win32)

 омпонентыMemo и RichEdit€вл€ютс€ окнами редактировани€ много≠строчного текста. ¬ компонентеMemo формат (шрифт, его атрибуты, выравнивание) одинаков дл€ всего текста и определ€етс€ свойствомFont,а компонентRichEdit работает с текстом в обогащенном формате RTF. ¬ остальном эти компоненты похожи.

ќсновные свойства:

¨ Font Ц шрифт текста

¨ Lines - текст окна в виде списка строк и имеющее тип TStrings.

¨ ScrollBars - определ€ет наличие полос прокрутки текста в окне.

ú SsNone Ц отсутствие(по умолчанию).ѕользователь может перемещатьс€ по тексту только с помощью курсора.

ú ssHorizontal - горизонтальна€ полоса прокрутки.

ú ssVertical - вертикальной полоса прокрутки

ú ssBoth Ц обе полосы прокрутки

Ќачальное значение текста можно установить в процессе проектировани€, нажав кнопку с многоточием около свойства Lines в окне »нспектора ќбъектов. ѕри этом откроетс€ окно редактировани€ списков строк. ћожно редактировать или вводить текст в этом окне или нажать кнопку < CodeEditor> и работать в обычном окне –едактора  ода. ¬ этом случае, завершив работу с текстом, нужно выбрать из контекстного меню, всплывающего при щелчке правой кнопкой мыши, команду Close Page и ответить утвердительно на вопрос о сохранении текста в свойстве.

¬о врем€ выполнени€ приложени€ можно измен€ть текст в окно редактировани€ с помощью методов свойства Lines.

(Memo1->Lines->)

¨ Add (УЌова€ строкаФ) - добавление в конец текста строки ЂЌова€ строкаї.¬озвращает номер новой строки.

¨ Append (У Ќова€ строка Ф) -добавление в конец текста строки ЂЌова€ строкаї. Ќе возвращает значение.

¨ Delete ( N ) Ц удалить строку с номером N.

¨ Insert ( N, У—трокаФ) Ц добавл€ет строку в позицию N

¨ Exchange ( N1, N2 ) Ц мен€ет местами строки с номерами N1 и N2.

¨ Move ( N1, N2 ) Ц перемещает строку с номером N1 в позицию N2.

¨ LoadFromFile ( FileName ) Ц загрузить список из текстового файла с именем FileName
LoadFromStream ( Stream ) -загрузить список из потока Stream

¨ SaveToFile ( FileName ) -сохранить список в текстовом файле с именем FileName
SaveToStream ( Stream ) -сохранить список в потоке Stream

¨ Clear () -очистки текста в окне. Ётот метод можно примен€ть не только к свойству Lines, но и к самому окну Memo.

Memo1->Lines->Clear() или Memo1->Clear()

 

2. —оздание меню с помощью мастера

— помощью мастера можно создать приложение с типовой конфигурацией главного меню. „тобы запустить мастер необходимо:

Þ вызвать команду ЂNewЕї из главного меню ЂFileї

Þ в по€вившемс€ окне ЂNew Itemsї перейти на страницу ЂProjectsї

Þ выбрать ЂApplication Wizardї.

ѕосле нажати€ OK мастер начнет свою работу.

ѕроцесс создани€ меню мастер проводит в несколько шагов, запрашива€ у пользовател€ необходимые сведени€.

1 шаг Ќа первом шаге мастер предлагает выбрать разделы, которые будут содержатьс€ в главном меню.

2 шаг Ќа втором шаге, если был выбран раздел ЂFileї, есть возможность отредактировать расширени€ файлов, которые будут использоватьс€ в диалогах открыти€ и записи файла. ƒл€ добавлени€ новой записи нужно нажать на кнопку ЂAddї и в открывшеес€ окно ввести описание (Description) и расширение(€) (Extension(s)), например, Ђ‘айлы программї и Ђ.comї; Ђ.exeї

3 шаг Ќа третьем шаге с помощью кнопок ЂRemoveї, ЂInsertї и ЂSpaceї можно создать панель инструментов.

4 шаг Ќа четвертом шаге необходимо задать им€ (в верхнем поле) и каталог (в нижнем поле) приложени€ и, по желанию, включить следующие опции:

Þ Create MDI Application Ц создать многооконное приложение;

Þ Create a status line Ц создать строку состо€ни€;

Þ Enable Hints Ц включить всплывающие подсказки.

ѕосле этого в выбранном каталоге будет создано новое приложение с заданным именем, включающее в себ€ созданное по ответам пользовател€ главное меню.

3.  омпоненты MainMenu и –оpupMenu (панель Standart)

¬ C++Builder имеетс€ два компонента, представл€ющие меню:MainMenu Ц главное меню и –оpupMenu Ц всплывающее меню. Ёти компоненты имеют много общего.

ћеню - невизуальные компоненты, т.е. место размещени€ их на форме в процессе проектировани€ не имеет значени€ дл€ пользовател€, так как он их не увидит, а увидит только меню, сгенерированные ими.

 омпоненты меню необходимо св€зать с компонентами, к которым они относ€тс€. √лавное меню всегда св€зано с самой формой. —в€зь формы с главным меню MainMenu осуществл€етс€ через специальное свойство формы Ц Menu, в котором указываетс€ ссылка на главное меню. Ёта св€зь возникает автоматически при добавлении на форму MainMenu.

—в€зь компонента со всплывающим меню также осуществл€етс€ через специальное свойство, присущее почти всем компонентам Ц PopupMenu. Ёта св€зь автоматически не возникает. ƒл€ ее установлени€ в свойстве PopupMenu некоторого компонента необходимо самосто€тельно указать ссылку на всплывающее меню, которое будет св€зано с данным компонентом, а свойство всплывающего меню AutoPop должнобыло установлено в true. “огда при при нажатии на компоненте правой кнопки мыши в процессе выполнени€ приложени€ будет по€вл€тьс€ всплывающее меню. “акое всплывающее меню называетс€ контекстным.

4. ѕроектирование меню с помощью  онструктора ћеню

ќсновное свойство компонентов меню Ч Items. –едактирование меню, т.е. заполнение свойства Items, осуществл€етс€ в  онструкторе ћеню. ≈го вызов производитс€ двойным щелчком на компонентеили нажатием кнопки с многоточием р€дом со свойствомItems в окне »нспектора ќбъектов. ¬ результате откроетс€ окно, вид которого представлен на рис.1, в котором можно спроектировать все меню.

ü —оздание раздела. ƒл€ создани€ нового раздела необходимо поместить курсор в рамку из точек, обозначающую место расположени€ раздела (см. рис.1) и задать в »нспекторе ќбъектов его свойство Caption, которое обозначает надпись раздела. ≈сли в свойство Caption ввести символ Ђ-ї, то будет создана разделительна€ черта.

 

 
 

 аждый раздел меню, т.е. каждый элемент свойства Items, €вл€етс€ объектом типа TMenuItem, обладающий своими свойствами, методами, событи€ми.
—войство Name задает им€ объекта, соот≠ветствующего разделу меню. ¬о избежание путаницы рекомендуетс€ задавать объектам осмысленные имена.

ü ¬ставка нового раздела. ƒл€ вставки нового раздела необходимо выбрать раздел, выше или левее которого требуетс€ сделать вставку и нажать клавишу ЂInsї или вызвать команду ЂInsertї из контекстного меню (по€вл€етс€ при щелчке на окне правой кнопкой мыши, см. рис.1).

ü ѕеремещение раздела. „тобы переместить раздел в другое место меню необходимо отбуксировать его туда мышью.

ü —оздание подменю. ƒл€ создани€ подменю необходимо выбрать раздел, дл€ которого требуетс€ создать подменю, и нажать ЂCtrl+Ѓї или вызвать команду ЂCreate Submenuї из контекстного меню.

ü ”даление раздела. „тобы удалить раздел необходимо выделить его и нажать ЂDelї или вызвать команду ЂDeleteї из контекстного меню.

ü ¬ставка раздела из шаблона. ƒл€ вставки раздела из шаблона необходимо вызвать команду ЂInsert From Templateї из контекстного меню и выбрать нужный шаблон. Ёлементы шаблона создадут подменю выбранного элемента или новый раздел в главном меню. ѕользователю предоставл€етс€ возможность контролировать наполнение списка шаблонов: удал€ть ненужные Ц команда ЂDelete Templatesї, сохран€ть созданные Ц ЂSave As Templateї из контекстного меню.

ü ¬ставка раздела из другого меню. Ёта операци€ часто используетс€ дл€ редактировани€ всплывающего меню, т.к. обычно его разделы повтор€ют некоторые из главного меню. ƒл€ вставки раздела из другого меню необходимо сначала перейти в это меню. Ёто можно сделать, вызвав команду ЂSelect Menuї из контекстного меню. «атем выделить нужные разделы (несколько разделов можно выделить, удержива€ Shift или Ctrl), скопировать разделы в буфер, нажав ЂCtrl-Cї. ѕотом с помощью пункта ЂSelect Menuї вернутьс€ обратно и вставить разделы из буфера, нажав ЂCtrl-Vї.

ü «адание Ђгор€чих клавишї и клавиш быстрого доступа к разделу.
—войство ShortCut определ€ет Ђгор€чиеї клавиши, с помощью которых пользователь, даже не заход€ в меню, может в любой момент вызвать выполнение процедуры, св€занной с данным разделом. „тобы определить Ђгор€чиеї клавиши, надо открыть выпадающий список свойстваShortCut в окне »нспектора ќбъектов и выбрать из него нужную комбинацию клавиш. Ёта комбинаци€ по€витс€ в строке раздела меню.

 лавиши быстрого доступа задаютс€ в свойстве Caption. ≈сли некоторой букве надписи (например ЂSї) предшествует сим≠вол Ђ&ї, то обращение к соответствующей команде можно выполн€ть нажатием ЂAlt-Sї.

ü «адание раздела по умолчанию. —войство Default определ€ет, €вл€етс€ ли данный раздел разделом по умолчанию своего подменю, т.е. разделом, выполн€емым при двойном щелчке пользовател€ на родительском разделе.

ü «адание изображени€ дл€ раздела. ¬ C++Builder-4 и выше предусмотрена возможность ввода в разделы меню изображений. ƒл€ этого служит свойство Bitmap. ¬ыбор изображени€ производитс€ подобно выбору изображени€ дл€ свойства Glyph компонента BitBtn (см. лаб.раб.є1): при на≠жатии кнопки с многоточием в строке этого свойства открываетс€ окно, нажав кнопку Load в котором можно перейти в обычное окно открыти€ файла рисун≠ка. ¬ыбрав изображение необходимо нажать OK.

 

5. ќрганизаци€ отклика на вызов пункта меню

ќсновное событие раздела Ч OnClick, возникающее при щелчке пользовател€ на разделе или при нажатии Ђгор€чихї клавиш. ¬ обработчик этого событи€ можно перейти, использу€ вкладку Events »нспектора ќбъектов в процессе конструировани€ меню или щелкнув мышью по разделу меню на форме (обратите внимание Ц на форме, а не в  онструкторе ћеню).

 

6. ƒиалоги как модальные формы

ƒиалоговое окно представл€ет собой отдельно проектируемую форму.  ажда€ форма представлена в программе отдельным модулем с заголовочным файлом. ƒл€ возможности вызова диалога из основной формы необходимо подключить заголовочный модуль диалога в модуль основной формы с помощью директивы препроцессора include.

v Ќапример, если главна€ форма определ€етс€ модулем ЂMain.cppї, а диалогова€ Ц ЂMyDialog.cppї, то необходимо в файл ЂMain.cppї добавить строку:

#include УMyDialog.hФ

 

ƒиалогова€ форма должна по€вл€тьс€ и закрыватьс€ во врем€ выполнени€ программы. ѕоэтому при проектировании целесообразно задавать свойство Visible Ц видимость Ц диалоговой формы false, а в программе предусмотреть изменение формы в видимую в ответ на какие-либо действи€ пользовател€, например, при выборе им пункта меню. ‘орму можно сделать видимой методами Show () и ShowModal (), например,

Form2->Show()

ћетод ShowModal() открывает форму как модальную. ќткрытие форм как модальных используетс€ в большинстве диалоговых окон. ћодальна€ форма приостанавливает выполнение вызвавшей ее процедуры до тех пор, пока пользователь не закроет эту форму. ћодальна€ форма также не позвол€ет пользователю переключить фокус курсором мыши на другие формы данного приложени€, пока форма не будет закрыта. “ак что пользователь должен выполнить предложенные ему действи€ прежде, чем продолжить работу. ћодальной может быть сделана люба€ форма, если она делаетс€ видимой методом ShowModal. ≈сли та же сама€ форма делаетс€ видимой методом Show(), то она не будет модальной.

ѕоведение модальной формы определ€етс€ ее основным свойством ModalResul t. Ёто свойство доступно только во врем€ выполнени€ приложени€. ѕри открытии формы методом ShowModal сначала свойство ModalResult=mrNone=0.  ак только при обработке каких-то событий на форме свойству ModalResult будет присвоено положительное значение от 1=mrOK до 8=mrAll, модальна€ форма закроетс€.

≈сли на модальной форме размещена кнопка, то при ее нажатии происходит присваивание свойству ModalResult формы значени€ свойства ModalResult кнопки. «начение свойства ModalResult кнопки можно задать в процессе проектировани€ программы, выбрав его из выпадающего списка свойств в »нспекторе ќбъектов. «начение свойства ModalResult формы можно будет прочитать после ее закрыти€.

v ѕример:

{ЕЕ

Form2->ShowModal();

if (Form2->ModalResult = = mrCancel)

Edit1->Text = Ф¬ окне Form2 была нажата кнопка ќтменаФ

ЕЕ}

“аким образом, программа, вызвавша€ модальную форму, может узнать, что сделал пользователь, работа€ с этой формой, например, по какой он кнопке щелкнул.

 

7. —оздание диалогового окна с помощью шаблона

ƒиалоговое окно можно создавать вручную, т.е. создать новую форму, использу€ команду Ђ New Formї из главного меню ЂFileї, разместить на ней необходимые компоненты, определить действи€, обработчики событий и т.д., а можно воспользоватьс€ заготовками диалогов из шаблона. Ўаблон позвол€ет вставить в приложение заготовку нового диалогового окна, на котором уже размещены типовые кнопки, чаще всего встречающиес€ в диалогах, такие как OK, Cancel, Help; и дл€ которого уже заданы некоторые свойства.

„тобы вставить в приложение диалог из шаблона необходимо:

Þ вызвать команду ЂNewЕї из главного меню ЂFileї

Þ в по€вившемс€ окне ЂNew Itemsї перейти на страницу ЂDialogsї

Þ выбрать нужный шаблон, например, StandardDialog или запустить мастер DialogWizard, который, запрашива€ пользовател€, за несколько шагов конструирует новое диалоговое окно.

ѕри добавлении диалога в приложение будет вставлен новый модуль, представл€ющий диалоговую форму. ≈го следует сохранить в папке с приложением, задав какое-либо им€.

¬ процессе проектировани€ часто бывает, что главна€ форма скрывает за собой диалоговую. „тобы выбрать скрытую форму можно использовать комбинацию клавиш ЂShift+F12ї.

 

8. ¬ызов диалогового окна пунктом меню

ƒл€ вызова диалогового окна пунктом меню необходимо в обработчике событи€ OnClick пункта меню делать диалоговое окно видимым.  ак отмечалось, чаще всего дл€ диалоговых окон используют метод ShowModal (), который позвол€ет открыть форму как модальную.

v ѕример:

»спользу€ шаблон, добавим в приложение диалоговое окно OKRightDlg. ƒл€ вызова диалога пунктом меню CallDlg обработчик событи€ OnClick должен иметь следующий вид:

void __fastcall TForm1::CallDlgClick(TObject *Sender)

{ OKRightDlg->ShowModal(); // открытие формы OKRightDlg как модальной

ЕЕЕ // обработка результата закрыти€ диалоговой формы

}

9. ѕрием введенных значений из диалогового окна в основное окно приложени€

ќбмен данными между окнами можно осуществл€ть через глобальные переменные. ќписать глобальную переменную нужно в заголовочном модуле диалога, имеющим расширение Ђ.hї (быстро открыть заголовочный модуль можно нажав <Ctrl>+F6), а определить Ц в основном модуле диалога, имеющим расширение Ђ.cppї.

v ѕример:

ƒл€ рассмотренного в пункте 6 примера дл€ описани€ глобальной переменной строка типа AnsiString нужно:

1. в файл ЂMyDialog.hї дописать:

extern AnsiString stroka;

2. в файл ЂMyDialog.cppї -

AnsiString stroka;

ѕусть на основной форме имеетс€ компонент Memo1, в который должна добавл€тьс€ строка из окна редактировани€ Edit1 диалога. —начала эта строка должна записыватьс€ в глобальную переменную stroka. Ёто должно происходить при нажатии кнопки ќ  на диалоге. ќбработчик событи€ OnClick дл€ этой кнопки должен выгл€деть следующим образом:

void __fastcall TOKRightDlg::OKBtnClick(TObject *Sender)

{ stroka = Edit1->Text; }

ѕри нажатии кнопки ќ  на диалоге его свойство ModalResult станет равным свойству ModalResult кнопки, а так как это свойство дл€ кнопки отлично от нул€ (от mrNone), а именно равно mrOK=1, то диалоговое окно закроетс€, но его свойство ModalResult останетс€ доступным.

ѕровер€€ это свойство в обработчике OnClick пункта меню можно узнать, какую кнопку нажал пользователь. ≈сли он нажал ќ , то необходимо в Memo1 добавить строку stroka.ќбработчик событи€ OnClick дл€ раздела меню CallDlg должен выгл€деть следующим образом:

void __fastcall TForm1::CallDlgClick(TObject *Sender)

{ OKRightDlg->ShowModal();

if (OKRightDlg->ModalResult==mrOk) Memo1->Lines->Add(stroka);

}

v ѕример программы Ђјнкетаї:

Ѕудем запрашивать у пользовател€ данные о ‘»ќ и дате рождени€ и заносить их в общую таблицу.

ѕоместим на форму MyForm компоненты

Þ Memo1

Þ MainMenu1

— помощью конструктора добавим в меню пункт <ƒобавить строку>. ƒл€ этого

o ўелкнем 2 раза на компоненте MainMenu1

o «аполним свойсто Caption первого раздела: &ƒобавить строку

—оздадим диалоговую форму дл€ ввода данных. File Ѓ New Form. ѕоместим на нее компоненты:

Þ Label1 Ц Caption = ‘амили€

Þ Edit1

Þ Label2 Ц Caption = »м€

Þ Edit2

Þ Label3 Ц Caption = ќтчество

Þ Edit3

Þ Label4 Ц Caption = ƒата рождени€

Þ DateTimePicker1

Þ Button1 Ц Caption = ¬вод, ModalResult = MrOk

Þ Button1 Ц Caption = ќтмена, ModalResult = MrCancel

ќпределим глобальную переменную дл€ передачи данных из диалоговой форму в главную.

¬ файле Unit2.h (дл€ вызова Ctrl+F6) напишем

struct TNewMen

{ AnsiString Fam, Name, Otch;

TDateTime Date;

};

extern TNewMen NewMen;

extern AnsiString Str;

¬ файле Unit2.cpp:

TNewMen NewMen;

extern AnsiString Str;

ƒл€ св€зи форм в файле Unit1.cpp:

#include УUnit2.hФ;

ƒл€ записи данных в переменную в обработчике событи€ OnClick дл€ Button1 напишем

NewMen.Fam=Edit1->Text;

NewMen.Name=Edit2->Text;

NewMen.Otch=Edit3->Text;

NewMen.Date=DateTimePicker1->Date;

Str = NewMen.Fam+' '+NewMen.Name+' '+NewMen.Otch+' '+

NewMen.Date.FormatString("ddddd");

ƒл€ вызова диалоговой формы при нажатии пункта меню и прин€ти€ из нее данных в обработчике этого событи€ (щелкнуть на пункте меню) напишем:

Form2->ShowModal();

if (Form2->ModalResult==mrOk) Memo1->Lines->Add(Str);

—оздадим в текущем каталоге файл УAnketa.txtФ (‘айлЃ—оздатьЃ“екстовый документ) и добавим операторы дл€ считывани€ данных из файла при начале работы и записи в файл при завершении.

void __fastcall TForm1::FormCreate(TObject *Sender)

{ Memo1->Lines->LoadFromFile("Anketa.txt");}

 

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{ Memo1->Lines->SaveToFile("Anketa.txt"); }

 





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-10-01; ћы поможем в написании ваших работ!; просмотров: 460 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

Ќасто€ща€ ответственность бывает только личной. © ‘азиль »скандер
==> читать все изречени€...

1406 - | 1267 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.083 с.