[ Pobierz całość w formacie PDF ]
.Plik z dysku odczytujemykorzystając z metody LoadFromFile(), zapisujemy zaś przy pomocy SaveToFile().W funkcji CheckFileSave() skorzystaliśmy z właściwości Modified komponentówedycyjnych, w tym również klasy TRichEdit.Jeżeli wykonamy jakąkolwiek modyfikację oknaedycji, nastąpi wywołanie metody:virtual void __fastcall Modified(void) = 0 ; 114Borland C++Builder 5.wiczenia praktycznektórą należy obsłużyć, chociażby w sposób zaprezentowany poniżej.Jeżeli zdecydujemy sięzapisać zmiany, zostanie wywołana funkcja obsługi zdarzenia FileSaveAsClick(this), wprzeciwnym wypadku nastąpi wywołanie funkcji Abort() wstrzymującej wykonywaniabieżącego zdarzenia.W języku C++ istnieje słowo kluczowe this, będące ważnym elementem wielu tzw. przeładowywanych operatorów.Każda funkcja składowa aplikacji lub ogólnieobiektu w momencie wywołania uzyskuje automatycznie wskaznik do obiektu, któryją wywołał.Dostęp do tego wskaznika uzyskuje się dzięki słowu (wskaznikowi)this, który jest niejawnym parametrem wszystkich funkcji wchodzących w składobiektu (aplikacji).Jeżeli w pewnej, wydzielonej części aplikacji, np.w jakiejś funkcji, wywołujemyfunkcję obsługi zdarzenia, której argumentem jest z reguły wskaznik TObject*Sender, należy wówczas jawnie uzyskać do niego dostęp.Z reguły robimy tokorzystając właśnie ze wskaznika this.Wydruk 6.4.Kod modułu Unit07.cpp aplikacji wykorzystującej listę akcji TActionList w celuzorganizowania pracy głównego menu oraz całego programu.#include#pragma hdrstop#include "Unit07.h"#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//--------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){}//--------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender){OpenDialog1->InitialDir = ExtractFilePath(ParamStr(0));OpenDialog1->Filter ="*.dat , *.txt, *.cpp, *.c, *.rtf | *.dat; *.txt; *.cpp;*.c; *.rtf";SaveDialog1->InitialDir = OpenDialog1->InitialDir;SaveDialog1->Filter = "*.*|*.*";RichEdit1->ScrollBars = ssVertical;FileNew->Hint = "Nowy plik Ctrl+N";FileNew->ShowHint = TRUE;FileOpen->Hint = "Otwórz plik Ctrl+O";FileOpen->ShowHint = TRUE;FileSave->Hint = "Zapisz jako.Ctrl+J";FileSave->ShowHint = TRUE;Copy->Hint = "Kopiuj Ctrl+C";Copy->ShowHint = TRUE;Paste->Hint = "Wklej Ctrl+V"; 115Paste->ShowHint = TRUE;Cut->Hint = "Wytnij Ctrl+X";Cut->ShowHint = TRUE;Undo->Hint = "Cofnij Ctrl+Z";Undo->ShowHint = TRUE;}//--------------------------------------------------------------------void __fastcall TForm1::CheckFileSave(void){if (RichEdit1->Modified){switch(MessageBox(NULL, "Zawartość pliku lub okna została"" zmieniona.Zapisać zmiany?", "Uwaga!",MB_YESNOCANCEL | MB_ICONQUESTION)){case ID_YES : FileSaveAsClick(this);case ID_CANCEL : Abort();};}}//--------------------------------------------------------------------void __fastcall TForm1::FileNewClick(TObject *Sender){CheckFileSave();RichEdit1->Lines->Clear();RichEdit1->Modified = FALSE;}//--------------------------------------------------------------------void __fastcall TForm1::FileOpenClick(TObject *Sender){CheckFileSave();if (OpenDialog1->Execute()){RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);RichEdit1->Modified = FALSE;RichEdit1->ReadOnly =OpenDialog1->Options.Contains(ofReadOnly);}}//--------------------------------------------------------------------void __fastcall TForm1::FileSaveAsClick(TObject *Sender){if (SaveDialog1->Execute()){RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);RichEdit1->Modified = False;}}//--------------------------------------------------------------------void __fastcall TForm1::UndoClick(TObject *Sender){if (RichEdit1->HandleAllocated())SendMessage(RichEdit1->Handle, EM_UNDO, 0, 0);}//--------------------------------------------------------------------void __fastcall TForm1::CutClick(TObject *Sender){RichEdit1->CutToClipboard(); 116Borland C++Builder 5.wiczenia praktyczne}//--------------------------------------------------------------------void __fastcall TForm1::PasteClick(TObject *Sender){RichEdit1->PasteFromClipboard();}//--------------------------------------------------------------------void __fastcall TForm1::CopyClick(TObject *Sender){RichEdit1->CopyToClipboard();}//--------------------------------------------------------------------void __fastcall TForm1::CloseApplicationClick(TObject *Sender){switch(MessageBox(NULL, " Działanie aplikacji zostanie"" zakończone.", "Uwaga!", MB_YESNOCANCEL | MB_ICONQUESTION)){case ID_YES :{if (RichEdit1->Modified)CheckFileSave();Application->Terminate();}case ID_CANCEL : Abort();};}//--------------------------------------------------------------------Funkcje zdarzeniowe CutClick(), PasteClick(), CopyClick(), towarzyszące podmenuEdycja oraz zaimplementowane w odpowiednich przyciskach zgrupowanych w paneluToolBar1, czyli Cut, Paste, Copy korzystają z metod: RichEdit1->CutToClipboard(),RichEdit1->PasteFromClipboard()i , RichEdit1->CopyToClipboard().Funkcje te Zapewniając możliwość umożliwiają także usuwanie usunięcia fragmentu tekstu, wstawiaeniefragmentu tekstu znajdującego się w schowku (ang.clipboard) oraz s kopiowanie fragmentu tekstudo schowka.Możliwe jest również zaznaczaenie całości tekstu przy wykorzystaniu metodyRichEdit1->SelectAll().Aby powtórzyć ostatnio wykonaną (na tekście) operację, należyskorzystać z metody RichEdit1->HandleAllocated(), umieszczonej w funkcji obsługizdarzenia UndoClick().Przykład wykorzystania komponentów TApplicationEvents oraz TTimerwiczenie 6.5.1.Załóżmy na dysku oddzielny katalog, i nazwijemy go \Projekt08.2.Zaprojektujmy formularz w ten sposób, aby składał się z dwóch komponentówTButton oraz po jednym TTimer i TApplicationEvents, tak jak pokazuje to rys.6.14. 117Rys.6.14.Komponentyformularza projektuProjekt08.bpr3 [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • agnieszka90.opx.pl