Notatnik - piszemy kod
2.1 - Nowy, Otwórz, Zapisz...
Tworzenie interfejsu jest stosunkowo prostym procesem. Jednak sam interfejs nie wystarczy. W końcu, aplikacja ma czemuś służyć. Właśnie teraz zajmiemy się tworzeniem strony kodowej naszego notatnika. Przed tym jednak dodaj jeszcze dwa komponenty TOpenDialog i TSaveDialog znajdujące się na palecie Dialog.
Na sam początek dodamy obsługę, pierwszego od lewej, przycisku. Jak już wcześniej mówiliśmy, będzie on służył do utworzenia nowego dokumentu. Właściwie wystarczyło by wpisać:
jednak my posuniemy się trochę dalej. Zadbamy, aby w przypadku gdy aktualnie otwarty dokument nie został zapisany, użytkownik został spytany, co należy z nim zrobić... Kliknij podwójnie w wspomniany przycisk w celu wygenerowania obsługi OnClick i wklej następujący kod:
Na samym początku sprawdzamy wewnętrzną zmienną Modified komponentów klasy TRichedit, która może przyjmować dwa stany: true, lub false. Określają one kolejno: zmodyfikowany, niezmodyfikowany dokument. W przypadku, gdy dokument został zmodyfikowany wyświetlamy pytanie do użytkownika. Następnie sprawdzamy, którą opcję wybrał, jeżeli jest nią: YES wywołujemy funkcję zapisu dokumentu ( którą za chwilę stworzymy ). Następnie czyścimy zawartość komp. TRichEdit oraz ustawiamy jego właściwość Modified na false. W trakcie pojawia się także linia:
Pasek StatusBar2 posłuży nam do przechowywania informacji o ewentualnej nazwie i ścieżce do pliku. Ponieważ nowo tworzony plik nie jest jeszcze nigdzie zachowany zerujemy jego wartość. Takie przypisanie pozwoli nam w przyszłości na sprawdzenie, którą funkcję zapisu należy wykonać...
Myślę, że tyle wyjaśnień co do powyższego kodu wystarczy. Przejdźmy teraz do przycisku obsługującego otwieranie pliku. W jego zdarzeniu OnClick wpisz kod:
Powyższy kod nie zawiera żadnych nowych elementów. Podobnie jak poprzednio sprawdzamy stan aktualnie otwartego dokumentu, ewentualnie wywołujemy funkcję zapisującą. Na końcu otwieramy okienko do wyboru pliku i wczytujemy jego zawartość.
Chwilowo, pominiemy obsługę trzeciego przycisku. Wybierz z utworzonego przez Ciebie menu Plik | Zapisz jako... W tym momencie powinna zostać wygenerowana funkcja Zapiszjako1Click. Dodaj jej zawartość:
Powyższy kod jest bardzo krótki i banalny. Najpierw wywołujemy okno dialogowe służące do zapisu, sprawdzamy, czy został wybrany plik. Jeżeli tak zapisujemy zawartość komp. RichEdit1 do niego. Ustawiamy stan modyfikacji na false.
Powróćmy do obsługi funkcji OnClick trzeciego przycisku. Wstaw:
W tym momencie bardzo dokładnie widać, czemu miało służyć wpisywanie tekstu do komponentu StatusBar2. Na samym początku sprawdzamy, czy pasek jest pusty. Jeżeli tak, wywołujemy przed momentem utworzoną funkcję "Zapisz jako...". W przeciwnym wypadku, gdy TStatusBar zawiera ścieżkę do pliku, zapisujemy zawartość komponentu RichEdit do wskazanego pliku.
Na koniec tej części, zakończmy jeszcze pracę nad obsługą opcji menu Plik. Większość funkcji mamy już napisanych, wystarczy je przyporządkować poszczególnym pozycjom. W tym celu, poprzez dwukrotne kliknięcie w komp. MainMenu1, uaktywnij ponownie paletę służącą do zarządzania menu. Pojedynczym kliknięciem wybierz pozycję "Nowy". W ObjectInspector wybierz zakładkę Events. Rozwiń listę znajdującą się obok zdarzenia OnClick i wybierz zdarzenie SpeedButton1Click. Podobnie postąp z polami "Otwórz" i "Zapisz" przypisując im odpowiednie funkcje. Zamknij obsługę menu i z pozycji projektowania wybierz ostatnią pozycję w menu "Zamknij". W jej zdarzeniu OnClick wpisz:
Tworzenie interfejsu jest stosunkowo prostym procesem. Jednak sam interfejs nie wystarczy. W końcu, aplikacja ma czemuś służyć. Właśnie teraz zajmiemy się tworzeniem strony kodowej naszego notatnika. Przed tym jednak dodaj jeszcze dwa komponenty TOpenDialog i TSaveDialog znajdujące się na palecie Dialog.
Na sam początek dodamy obsługę, pierwszego od lewej, przycisku. Jak już wcześniej mówiliśmy, będzie on służył do utworzenia nowego dokumentu. Właściwie wystarczyło by wpisać:
Richedit1->Lines->Clear();
jednak my posuniemy się trochę dalej. Zadbamy, aby w przypadku gdy aktualnie otwarty dokument nie został zapisany, użytkownik został spytany, co należy z nim zrobić... Kliknij podwójnie w wspomniany przycisk w celu wygenerowania obsługi OnClick i wklej następujący kod:
if(RichEdit1->Modified)
{
int res = MessageDlg("Dokument został zmodyfikowany.
Chcesz zachować zmiany ?", mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo << mbCancel,0);
if(res == mrYes)
{
SpeedButton3Click(Sender);
RichEdit1->Lines->Clear();
StatusBar2->SimpleText = "";
RichEdit1->Modified = false;
}
else if(res == mrNo)
{
RichEdit1->Lines->Clear();
StatusBar2->SimpleText = "";
RichEdit1->Modified = false;
}
}
else
StatusBar2->SimpleText = "";
RichEdit1->Lines->Clear();
{
int res = MessageDlg("Dokument został zmodyfikowany.
Chcesz zachować zmiany ?", mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo << mbCancel,0);
if(res == mrYes)
{
SpeedButton3Click(Sender);
RichEdit1->Lines->Clear();
StatusBar2->SimpleText = "";
RichEdit1->Modified = false;
}
else if(res == mrNo)
{
RichEdit1->Lines->Clear();
StatusBar2->SimpleText = "";
RichEdit1->Modified = false;
}
}
else
StatusBar2->SimpleText = "";
RichEdit1->Lines->Clear();
Na samym początku sprawdzamy wewnętrzną zmienną Modified komponentów klasy TRichedit, która może przyjmować dwa stany: true, lub false. Określają one kolejno: zmodyfikowany, niezmodyfikowany dokument. W przypadku, gdy dokument został zmodyfikowany wyświetlamy pytanie do użytkownika. Następnie sprawdzamy, którą opcję wybrał, jeżeli jest nią: YES wywołujemy funkcję zapisu dokumentu ( którą za chwilę stworzymy ). Następnie czyścimy zawartość komp. TRichEdit oraz ustawiamy jego właściwość Modified na false. W trakcie pojawia się także linia:
StatusBar2->SimpleText = "";
Pasek StatusBar2 posłuży nam do przechowywania informacji o ewentualnej nazwie i ścieżce do pliku. Ponieważ nowo tworzony plik nie jest jeszcze nigdzie zachowany zerujemy jego wartość. Takie przypisanie pozwoli nam w przyszłości na sprawdzenie, którą funkcję zapisu należy wykonać...
Myślę, że tyle wyjaśnień co do powyższego kodu wystarczy. Przejdźmy teraz do przycisku obsługującego otwieranie pliku. W jego zdarzeniu OnClick wpisz kod:
if(RichEdit1->Modified)
{
int res = MessageDlg("Dokument został zmodyfikowany.
Chcesz zachować zmiany ?", mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo << mbCancel,0);
if(res == mrYes)
{
SpeedButton3Click(Sender);
RichEdit1->Lines->Clear();
RichEdit1->Modified = false;
}
else if(res == mrNo)
{
RichEdit1->Lines->Clear();
RichEdit1->Modified = false;
}
}
else
{
RichEdit1->Lines->Clear();
RichEdit1->Modified = false;
}
if(RichEdit1->Modified == false)
{
if(OpenDialog1->Execute())
{
RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
StatusBar2->SimpleText = OpenDialog1->FileName;
RichEdit1->Modified = false;
}
}
{
int res = MessageDlg("Dokument został zmodyfikowany.
Chcesz zachować zmiany ?", mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo << mbCancel,0);
if(res == mrYes)
{
SpeedButton3Click(Sender);
RichEdit1->Lines->Clear();
RichEdit1->Modified = false;
}
else if(res == mrNo)
{
RichEdit1->Lines->Clear();
RichEdit1->Modified = false;
}
}
else
{
RichEdit1->Lines->Clear();
RichEdit1->Modified = false;
}
if(RichEdit1->Modified == false)
{
if(OpenDialog1->Execute())
{
RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
StatusBar2->SimpleText = OpenDialog1->FileName;
RichEdit1->Modified = false;
}
}
Powyższy kod nie zawiera żadnych nowych elementów. Podobnie jak poprzednio sprawdzamy stan aktualnie otwartego dokumentu, ewentualnie wywołujemy funkcję zapisującą. Na końcu otwieramy okienko do wyboru pliku i wczytujemy jego zawartość.
Chwilowo, pominiemy obsługę trzeciego przycisku. Wybierz z utworzonego przez Ciebie menu Plik | Zapisz jako... W tym momencie powinna zostać wygenerowana funkcja Zapiszjako1Click. Dodaj jej zawartość:
if(SaveDialog1->Execute())
{
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
RichEdit1->Modified = false;
}
{
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
RichEdit1->Modified = false;
}
Powyższy kod jest bardzo krótki i banalny. Najpierw wywołujemy okno dialogowe służące do zapisu, sprawdzamy, czy został wybrany plik. Jeżeli tak zapisujemy zawartość komp. RichEdit1 do niego. Ustawiamy stan modyfikacji na false.
Powróćmy do obsługi funkcji OnClick trzeciego przycisku. Wstaw:
if(StatusBar2->SimpleText == "")
{
Zapiszjako1Click(Sender);
}
else
{
RichEdit1->Lines->SaveToFile(StatusBar2->SimpleText);
RichEdit1->Modified = false;
}
{
Zapiszjako1Click(Sender);
}
else
{
RichEdit1->Lines->SaveToFile(StatusBar2->SimpleText);
RichEdit1->Modified = false;
}
W tym momencie bardzo dokładnie widać, czemu miało służyć wpisywanie tekstu do komponentu StatusBar2. Na samym początku sprawdzamy, czy pasek jest pusty. Jeżeli tak, wywołujemy przed momentem utworzoną funkcję "Zapisz jako...". W przeciwnym wypadku, gdy TStatusBar zawiera ścieżkę do pliku, zapisujemy zawartość komponentu RichEdit do wskazanego pliku.
Na koniec tej części, zakończmy jeszcze pracę nad obsługą opcji menu Plik. Większość funkcji mamy już napisanych, wystarczy je przyporządkować poszczególnym pozycjom. W tym celu, poprzez dwukrotne kliknięcie w komp. MainMenu1, uaktywnij ponownie paletę służącą do zarządzania menu. Pojedynczym kliknięciem wybierz pozycję "Nowy". W ObjectInspector wybierz zakładkę Events. Rozwiń listę znajdującą się obok zdarzenia OnClick i wybierz zdarzenie SpeedButton1Click. Podobnie postąp z polami "Otwórz" i "Zapisz" przypisując im odpowiednie funkcje. Zamknij obsługę menu i z pozycji projektowania wybierz ostatnią pozycję w menu "Zamknij". W jej zdarzeniu OnClick wpisz:
Close();
Materiał dodany przez użytkownika: alphan
