Dodatki
Dodatek A
Odpowiedzi do pytań
W tym dodatku znajdują się odpowiedzi do pytań znajdujących się na końcu każdego rozdziału.
Rozdział 1
Jakie jest rozszerzenie pliku zawierającego moduł Object Pascala?
.pas
Jak brzmi słowo kluczowe określające sekcję deklaracji zmiennych?
var
Co robi funkcja IntToStr?
Konwertuje wartość całkowitą do postaci łańcucha.
W jakim celu używa się w modułach listy uses?
Lista uses zawiera nazwy modułów, z których korzysta danych moduł.
Czy dla kompilatora dwie poniższe deklaracje różnią się od siebie? Dlaczego?
var
top : Integer;
Top : Integer;
Obie deklaracje są identyczne, ponieważ w identyfikatorach język Pascal nie rozróżnia pomiędzy wielkimi i małymi literami.
Jak konkatenuje się łańcuchy w Pascalu?
Przez użycie operatora +. (W przypadku łańcuchów z zerowym ogranicznikiem można wykorzystać funkcję StrCat).
Jak można wstawić znak sterujący do łańcucha?
Umieszczając w łańcuchu znak hash (#), a za nim wartość kodu ASCII odpowiadającą znakowi sterującemu.
Jaka jest maksymalna długość krótkiego łańcucha (shortstring)?
255 znaków.
Ile bajtów może pomieścić tablica zadeklarowana następująco:
MojaTablica : array[0..10] of Byte;
11 bajtów (od 0 do 10).
Czy indeks bazowy tablicy jest równy 0 czy też 1?
Bazowa wartość indeksu tablicy wynika z jej deklaracji i może być dowolna. W poniższej deklaracji indeksem bazowym jest 0:
Tablica : array[0..9] of Integer;
W następnej deklaracji indeksem bazowym jest 1:
Tablica : array[1..10] of Integer;
Za to poniższa deklaracja określa indeks bazowy jako -1:
Tablica: array [ -1 .. 1 ] of Boolean;
Rozdział 2
Które instrukcje są wykonywane, jeżeli wyrażenie warunkowe w instrukcji if ma wartość True?
Instrukcja (lub blok instrukcji) występujące bezpośrednio za frazą then.
Ile wartości może zwrócić funkcja?
Jedną. Jeżeli jednak w funkcji zaimplementowane zostaną parametry przekazywane przez zmienną, faktycznie będzie ona mogła zwrócić więcej niż jedną wartość.
Jaka jest różnica (oprócz składniowej) pomiędzy pętlami while i repeat?
W pętli while wyrażenie warunkowe jest sprawdzane na początku pętli. W pętli repeat…until wyrażenie warunkowe jest sprawdzane na końcu pętli.
Jak działają procedury Break i Continue?
Procedura Break służy do przerwania pętli. Jej wywołanie spowoduje przerwanie pętli i przejście do pierwszego wyrażenia znajdującego się bezpośrednio za nią. Procedura Continue wymusza przeniesienie punktu wykonania na początek pętli.
Co to jest zmienna globalna?
Jest to zmienna dostępna w dowolnym miejscu programu. Do zmiennej globalnej można odwołać się z dowolnej funkcji lub procedury.
Czy rekord może zawierać w sobie dane różnych typów (Char, Integer, Word itd.)?
Tak, struktura tego typu może zawierać dowolną liczbę pól danych wszelkiego typu.
Jak można odwoływać się do pól rekordu?
Przy pomocy operatora kropki (.). Przykład:
Rekord.Nazwisko := "Kowalski";
Ile funkcji i procedur może występować w programie?
Nie istnieje praktycznie limit określający, ile funkcji i procedur może znaleźć się w programie.
Czy funkcja może wywołać inną funkcję lub procedurę?
Tak, funkcje i procedury mogą wywoływać inne funkcje i procedury (i w rzeczywistości często korzystają z tej możliwości).
Czy rekordy można umieszczać w tablicach?
Rekordy mogą być umieszczane w tablicy z równą łatwością jak wartości typu całkowitego, czy łańcuchy.
Rozdział 3
Jak usunąć ze zbioru wszystkie wartości?
Przypisując zbiorowi konstruktor pustego zbioru, np.:
Font.Style := [];
W jakim celu deklaruje się pola i metody prywatne?
Prywatne pola danych uniemożliwiają użytkownikowi klasy ich bezpośrednią modyfikację, zabezpieczając w ten sposób przechowywane w nich dane. Pola tego typu mogą być modyfikowane przez metody i właściwości publiczne, ale nie bezpośrednio.
Jak umożliwić użytkownikom czytanie i zapisywanie do pól prywatnych klasy (pozostawiając je jako prywatne)?
Przez użycie metod i właściwości.
Kiedy wywoływany jest destruktor klasy?
W chwili usuwania obiektu z pamięci.
Co oznacza przesłanianie metody klasy bazowej?
Przesłanianie metody oznacza zastąpienie metody w klasie podstawowej metodą w klasie potomnej. Aby nowa metoda mogła przesłonić metodę klasy podstawowej musi posiadać dokładnie taką samą nazwę, parametry i typ zwracanej wartości jak metoda klasy podstawowej.
Jak można zastąpić metodę klasy bazowej i jednocześnie skorzystać z niej w nowej metodzie?
We wnętrzu nowej metody przesłaniającej należy wywołać funkcję klasy podstawowej, używając dyrektywy inherited:
procedure MojaKlasa.Metoda;
begin
Inherited Metoda;
{ pozostałe operacje }
end;
Jaki operator jest używany do odwołania się do danej, na którą wskazuje wskaźnik?
Operatora wskazania (^).
Czy klasa może zawierać jako swoje pola obiekty innych klas?
Tak. Jest to powszechna praktyka.
Jakie słowo używane jest do nadania wskaźnikowi wartości nieokreślonej?
Słowo kluczowe nil.
W jakim celu używa się operatora as?
W celu rzutowania wskaźnika obiektu na inny typ klasy pochodnej lub odwrotnie.
Rozdział 4
Jak wywołuje się okno dialogowe Customize (Dostosuj) głównego okna Delphi?
Należy kliknąć prawym przyciskiem na pasku narzędzi i wybrać polecenie Customize z menu kontekstowego.
Jeżeli otwarte jest okno Customize, w jaki sposób dodaje się przyciski do paska narzędzi?
Wystarczy przeciągnąć określony element ze strony poleceń (Commands) i upuścić go w wybranym miejscu.
Jak usuwa się przyciski z paska narzędzi?
Należy przeciągnąć je poza obszar paska i upuścić.
Jaki jest najprostszy sposób umieszczania na formularzu wielu takich samych komponentów?
Należy przytrzymać klawisz Shift i kliknąć na komponent w Palecie Komponentów. Każde kliknięcie na formularzu spowoduje teraz umieszczenie w nim komponentu.
Jaki jest najprostszy sposób umieszczenia komponentu dokładnie na środku formularza?
Dwukrotne kliknięcie na przycisk komponentu w Palecie Komponentów.
Wymień typy plików niezbędnych do zbudowania aplikacji w Delphi.
Pliki .dpr, .pas i .dfm.
Jakiej metody VCL używa się do wyświetlenia formularza niemodalnego?
Show.
Jakiej metody VCL używa się do wyświetlenia formularza modalnego?
ShowModal.
Jak można dołączyć do zdarzenia procedurę obsługi, która została już wcześniej zdefiniowana?
Trzeba przejść na stronę Events Inspektora Obiektów, kliknąć na przycisk rozwinięcia listy znajdujący się w kolumnie Value obok określonego zdarzenia i wybrać jedną z funkcji widocznych na wyświetlonej liście.
W jaki sposób można przejrzeć wszystkie wartości określonej właściwości za pomocą Inspektora Obiektów?
Klikając dwukrotnie na kolumnę wartości obok nazwy właściwości . Każde podwójne kliknięcie będzie powodowało zmianę wartości na kolejny element w liście.
Rozdział 5
Czy wszystkie komponenty są widoczne w fazie projektowania?
Nie. W czasie projektowania widoczne są tylko komponenty wizualne.
Czy OpenDialog jest komponentem wizualnym czy niewidocznym?
Jest komponent niewidoczny. Mimo, że jest on wyświetlany w czasie wykonania programu, traktuje się go jako komponent niewidoczny, ponieważ jest on niewidoczny w czasie projektowania.
Jak nazywa się klasa VCL, która reprezentuje formularz?
TForm
Czy wszystkie wersje Delphi są dostarczane z tym samym zestawem komponentów?
Nie. Wersja Professional zawiera więcej komponentów niż wersja Standard. Podobnie wersja Client/Server zawiera więcej komponentów niż wersja Professional.
Czy ostatecznym przodkiem wszystkich klas VCL jest TObject?
Tak.
Wymień jeden komponent niewidoczny.
TOpenDialog, TSaveDialog, TRegistry, TColorDialog, TTimer, TImageList, TFontDialog oraz wiele innych.
Czy istnieją właściwości współdzielone przez wszystkie komponenty?
Tak. Wszystkie komponenty wywodzą się z komponentu TComponent, stąd posiadają one jego właściwości, takie jak np. Name czy Owner.
Wymień dwie wspólne własności, które posiadają wszystkie komponenty wizualne?
Do właściwości powszechnego użytku współdzielonych przez komponenty wizualne zaliczyć można Top, Left, Owner, Parent, Width, Height i inne.
Czy dwa lub więcej komponentów może współdzielić tą samą procedurę obsługi zdarzenia?
Tak.
Jakim terminem określa się w VCL kontekst urządzenia? Jak nazywa się klasa, która implementuje konteksty urządzeń?
Kontekst urządzenia jest określany mianem płótna (ang. canvas) reprezentowanego w VCL przez klasę TCanvas.
Rozdział 6
Kiedy podczas zaznaczania komponentów używa się opcji „Ctrl+przeciągnij”?
Podczas wybierania komponentów zawartych w innym komponencie-pojemniku (na przykład w panelu).
Jakie jest znaczenie pierwszego wybranego komponentu podczas wyrównywania i dopasowywania grupy komponentów?
Jest to komponent zakotwiczony. Jego pozycja nie ulega zmianie, a inne komponenty są wyrównywane względem niego.
Jaka jest najszybsza metoda zaznaczenia grupy elementów?
Przeciągnięcie myszą wokół wszystkich komponentów.
Jak możesz zmusić wszystkie komponenty w grupie, aby miały szerokość najszerszego komponentu?
Trzeba zaznaczyć wszystkie komponenty, które mają zostać zmodyfikowane. Następnie wybrać polecenie Edit | Size i kliknąć na przycisk opcji Grow to Largest.
Co się stanie, gdy dwukrotnie klikniesz na komponencie znajdującym się w formularzu?
W Edytorze Kodu wyświetlona zostaje szkielet procedury obsługującej domyślne zdarzenie komponentu. Dla wielu komponentów wyświetlana jest procedura obsługująca zdarzenie OnClick. W szczególnych przypadkach (np. dla komponentu Image) wyświetlane jest okno dialogowe.
Za co jest odpowiedzialna wartość alClient własności Align?
Wartość ta wymusza wypełnienie przez komponent całego obszaru klienta swojego komponentu-właściciela (zwykle formularza), niezależnie od jego bieżącego rozmiaru.
Co oznacza wielokropek występujący obok elementu menu?
Zgodnie z tradycją wielokropek oznacza, że rezultatem wybrania danego pola menu będzie wyświetlenie okna dialogowego.
Jakie znasz dwie metody przesuwania elementu menu?
Można przeciągnąć element menu na nową pozycję w Projektancie Menu lub użyć mechanizmu wycinania i wklejania.
W jaki sposób do elementu menu można dodać klawisze skrótu?
Wpisując etykietę reprezentującą element menu należy wstawić znak & przed literą, która ma stanowić skrót. Przykładowo w przypadku elementu menu Plik | Zakończ etykieta powinna mieć postać Za&kończ.
Co zrobić, aby element menu był początkowo nieaktywny?
Trzeba ustawić właściwość Enabled na False.
Rozdział 7
Czy możliwa jest zmiana właściwości Name komponentu w trakcie pracy programu?
Tak, ale jest bardzo nierozsądne posunięcie.
Jaka właściwość służy do uaktywniania i dezaktywacji kontrolek?
Właściwość Enabled.
W jaki sposób w trakcie pracy programu można stwierdzić, iż przycisk jest nieaktywny?
Reprezentujący go tekst jest wyświetlony bez kontrastu (grayed-out).
Jaka różnica występuje między długim, a krótkim tekstem pomocy kontekstowej?
Długi tekst pomocy jest przeznaczony dla paska stanu, z kolei krótki tekst jest wyświetlany w postaci podpowiedzi.
Wymień trzy z czterech metod, które mogą zostać użyte do poinformowani kontrolki o konieczności odświeżenia samej siebie.
Invalidate, Repaint, Refresh i Update.
Ile istnieje różnych typów obiektów combo?
Trzy: prosty, rozwijalny i lista rozwijalna.
W jaki sposób wykorzystywana jest właściwość ModalResult komponentów przycisków?
Kliknięcie na przycisk z właściwością ModalResult ustawioną na wartość całkowitą spowoduje zamknięcie formularza. Wartość właściwości ModalResult wybranego przycisku zostanie użyta jako wartość zwracana przez funkcję ShowModal.
Który z komponentów jest często wykorzystywany jako pojemnik dla innych komponentów?
Komponent Panel, również kilka innych komponentów nadaje się do tego celu.
Jaką wartość zwraca metoda Execute komponentu OpenDialog jeżeli użytkownik zamknie to okno kliknięciem na przycisku OK?
True.
W jaki sposób uczynić z komponentu SaveDialog okno dialogowe Zapisz jako?
Wystarczy zmienić wartość właściwości Title na Zapisz jako.
Rozdział 8
W jakiej sytuacji należy korzystać w Repozytorium z opcji Inherit?
Z opcji Inherit należy skorzystać wtedy, gdy chcemy, aby obiekt dziedziczony posiadał wszystkie cechy obiektu podstawowego, a także aby zmiany wprowadzane do obiektu podstawowego były odzwierciedlane również w obiekcie pochodnym.
W jaki sposób przebiega procedura zapisywania projektu w Repozytorium Obiektów?
Zapisanie projektu w Repozytorium Obiektów wymaga wyboru polecenia menu Project | Add to Repository.
Co dzieje się z formularzami potomnymi, po wprowadzeniu zamian do formularza podstawowego?
Po zmodyfikowaniu formularza podstawowego, wszystkie formularze potomne zostaną również zmodyfikowane aby odzwierciedlić wprowadzone zmiany.
Gdzie w deklaracji klasy głównego formularza można umieszczać własne metody?
Własne metody można umieścić w sekcjach private i public deklaracji klasy. Nigdy nie umieszczaj własnych deklaracji w sekcji deklaracji klasy zarządzanej przez Delphi (o ile nie jesteś zupełnie pewny tego, co robisz).
Gdzie należy umieścić definicję metody (kod metody), dodając własną metodę do kodu Delphi?
W sekcji implementacyjnej (implementation) modułu.
W jaki sposób można w Repozytorium zidentyfikować twórcę danego obiektu?
Określenie twórcy obiektu w Repozytorium jest możliwe po przełączeniu trybu wyświetlania na szczegóły (Details). Autor obiektów jest jednym z elementów listy.
Gdzie można usunąć istniejące lub dodać nowe strony do Repozytorium?
Dodawanie i usuwanie nowych stron do/z Repozytorium odbywa się poprzez okno konfiguracji Repozytorium (otwierane poleceniem menu Tools | Repository).
Czy łatwiej jest stworzyć aplikację zaczynając od zera, czy też korzystając Kreatora Aplikacji?
Niemal we wszystkich przypadkach łatwiej jest tworzyć nowe aplikacje przy użyciu Kreatora Aplikacji.
Która opcja jest lepsza w przypadku małej aplikacji: konsolidacja statyczna czy konsolidacja dynamiczna z użyciem pakietów?
W przypadku małych aplikacji, konsolidacja statyczna jest zazwyczaj lepszym rozwiązaniem od konsolidacji dynamicznej, ponieważ aplikacja nie wymaga pakietów wykonywalnych.
Czy, przy pomocy edytora tekstowego, jesteś w stanie utworzyć plik skryptowy zasobów, zawierający tablicę łańcuchów?
Tak, przy pomocy edytora tekstu można bez problemu stworzyć tabelę łańcuchów. Trzeba jedynie wiedzieć, w jaki sposób powinna wyglądać struktura takiej tabeli.
Rozdział 9
W jaki sposób można szybko przełączać się między formularzem, a jego kodem źródłowym?
Do szybkiego przełączania się między Projektantem Formularzy i Edytorem Kodu służy przycisk F12.
Czy po usunięciu pliku z projektu w Menedżerze Projektów, plik ten jest również usuwany z twardego dysku?
Nie, jest on usuwany tylko z projektu.
W jaki sposób ustawia się główny formularz dla aplikacji?
Trzeba przejść na stronę Forms okna dialogowego ustawień projektu (Project Options) i wybrać formularz z listy rozwijalnej Main form. Wybrany formularz będzie traktowany jako główny formularz aplikacji.
Co by było, gdybyś nie dysponował automatycznie tworzonymi formularzami w Delphi?
Wtedy na Twoje ramiona spadła by odpowiedzialność za tworzenie formularzy przed ich użyciem.
W jaki sposób, poprzez Eksplorator Kodu, można dodać nowy element do modułu kodu?
Kliknij prawym przyciskiem myszy i wybierz polecenie New z menu kontekstowego Eksploratora Kodu. Wpisz deklarację nowego elementu i naciśnij Enter.
Jakie znaczenie dla aplikacji ma wygenerowanie informacji dla debuggera?
Wygenerowanie informacji dla debuggera umożliwia krokowe wykonywanie kodu aplikacji podczas sesji debuggera.
Do czego służy opcja Find in Files?
Opcja ta służy do poszukiwania tekstu w grupie plików.
Jaki skrót klawiszowy Edytora Kodu służy do zapisywania plików?
Ctrl+S (jeżeli ustawiony jest standardowy tryb mapowania klawiszy).
W jaki sposób ustawia się zakładkę w oknie edytora? Jaka liczba zakładek jest dostępna?
Do ustawiania zakładek służą kombinacje klawiszy od Ctrl+K+0 do Ctrl+K+9. Dostępnych jest dziesięć zakładek.
W jaki sposób w Edytorze Kodu można ustawić plik tylko do odczytu?
Wystarczy wybrać opcję Read Only z menu kontekstowego Edytora Kodu.
Rozdział 10
W jaki sposób umieszcza się punkt przerwania w linii kodu?
Kliknij na pasek kontrolny (lewy margines) na wysokości określonej linii kodu. Możesz również nacisnąć przycisk F5 lub wybrać polecenie Toggle Breakpoint z menu kontekstowego Edytora Kodu.
Co to jest nieprawidłowy punkt przerwania?
Jest to punkt przerwania nieumyślnie ustawiony w linii kodu, która nie generuje żadnego kodu skompilowanego.
W jaki sposób ustawia się warunkowy punkt przerwania?
Należy ustawić punkt przerwania, wybrać polecenie menu View | Debug Windows | Breakpoints, wybrać określony punkt w oknie listy punktów przerwań (Breakpoint List) i w końcu wybrać polecenie Properties z menu kontekstowego okna listy. Wyrażenie warunkowe można wpisać w pole Condition okna edycji punktu (Edit Breakpoint).
W jaki sposób można zmienić właściwości elementu występującego na liście wyrażeń testowych?
Kliknij podwójnie na elemencie w oknie listy wyrażeń testowych (Watch List). Po wyświetleniu okna właściwości wyrażenia testowego (Watch Properties) można dowolnie zmodyfikować właściwości tego elementu.
Podaj najszybszy sposób na dodanie zmiennej do listy wyrażeń testowych.
Należy kliknąć na zmienną i nacisnąć klawisz Ctrl+F5 (lub wybrać polecenie Add Watch at Cursor z menu kontekstowego Edytora Kodu).
Jakiego narzędzia należy użyć do przejrzenia pól i metod klasy?
Do przeglądania klas i rekordów służy Inspektor Śledzenia (Debug Inspector).
Jak wejść do wnętrza metody w trakcie pracy korowej?
Trzeba użyć klawisza F7 lub polecenia menu Run | Trace Into.
W jaki sposób można zmodyfikować wartość zmiennej w czasie śledzenia programu?
Należy kliknąć na zmienną i wybrać polecenie Evaluate/Modify z menu kontekstowego Edytora Kodu (lub wybrać polecenie menu Run | Evaluate/Modify). Wartość zmiennej można zmodyfikować w otwartym oknie dialogowym Evaluate/Modify.
Co umożliwia wysyłanie własnych komunikatów do kroniki zdarzeń (Event Log)?
Do wysyłania własnych komunikatów do dziennika zdarzeń służy metoda interfejsu Windows API - OutputDebugString.
Do czego służy opcja Integrated Debugging, usytuowana w dolnej części okna opcji debuggera?
Przy włączonej opcji Integrated Debugging i uruchomieniu programu ze środowiska Delphi, program pracuje pod kontrolą debuggera. Kiedy opcja ta jest wyłączona, program pracuje bez korzystania z debuggera.
Rozdział 11
Jaki efekt daje zastosowanie przezroczystego koloru podczas rysowania ikon i kursorów?
Tam gdzie użyty zostanie kolor przezroczysty, wyświetlane będzie to co znajduje się w danej chwili w tle ikony lub kursora.
W jaki sposób wybiera się kolor w Edytorze Graficznym?
Przez kliknięcie na kolor w palecie kolorów.
Jak zaznacza się obszar bitmapy przeznaczony do skopiowania lub wycięcia?
Należy wybrać narzędzie „namiotu” (Marquee) i przeciągając myszą zaznaczyć prostokątny obszar. Można również wybrać polecenie Edit | Select All aby zaznaczyć cały obraz lub użyć narzędzia Lasso.
Jaka maksymalna liczba kolorów jest dozwolona dla bitmapy w Edytorze Graficznym?
256.
Czym jest gorący punkt kursora?
Jest to jeden z pikseli kursora, którego współrzędne przyjmowane są umownie za współrzędne kursora.
Czy WinSight jest w stanie śledzić ukryte okna?
Tak. WinSight pokazuje zarówno okna ukryte jak i widoczne.
Jak najszybciej można zlokalizować okno w drzewie okien programu WinSight?
Należy wybrać polecenie Windows | Follow to Focus, a następnie kliknąć okno, które ma być śledzone.
W jaki sposób zmusić edytor do automatycznego zapisywania plików za każdym razem, gdy program jest uruchamiany pod kontrolą debuggera?
Trzeba zaznaczyć pole wyboru Editor files na stronie Preferences (sekcja Autosave) okna dialogowego ustawień projektu (Environment Options).
Co trzeba zrobić, aby zmienić uporządkowanie komponentów na Palecie Komponentów?
Zmianę uporządkowania elementów palety umożliwia strona Palette okna ustawień projektu.
Rozdział 12
Jakiego komponentu można użyć do tworzenia grafiki w formularzu?
Możliwe jest bezpośrednie rysowanie na płótnie formularza, jednak lepszym rozwiązaniem jest użycie komponentu PaintBox, który pozwala rysować na predefiniowanym fragmencie formularza (zajmowanym przez ten komponent).
Która z właściwości klasy TCanvas kontroluje kolor wypełnienia płótna?
Właściwość Brush.
Do czego służą regiony?
Regiony definiują prostokątny obszar, wewnątrz której można przeprowadzać operacje graficzne. Wszelkie operacje wykonane poza obszarem ograniczonym nie będą wyświetlane.
Jaka funkcja służy do rysowania tekstu na płótnie w wielu liniach?
Funkcja DrawText z ustawionym znacznikiem DT_WORDBREAK.
Która z metod klasy TCanvas może zostać wykorzystana do narysowania bitmapy z przezroczystym tłem?
BrushCopy.
Która z metod klasy TCanvas służy do przeniesienia całej bitmapy na płótno?
Można użyć kilku metod, ale najprostszą i najszybszą jest metoda Draw. Pozostałe metody to BrushCopy, StretchDraw i CopyRect.
W jaki sposób zapisuje się bitmapę pamięciową do pliku?
Przy użyciu metody SaveToFile.
Który z komponentów służy do odtwarzania plików dźwiękowych typu wave?
TMediaPlayer. Do odtworzenia pliku wave przy użyciu Windows API należy użyć funkcji PlaySound.
Do czego służy właściwość TimeFormat klasy TMediaPlayer?
Właściwość TimeFormat służy do ustawienia formatu czasu na podstawie typu odtwarzanych danych. Niektóre typy mediów mogą używać kilku formatów czasu (np. Audio CD).
Czy komponent MediaPlayer umożliwia nagranie pliku dźwiękowego typu wave?
Tak, ale wymaga to przeprowadzenia pewnych przygotowań.
Rozdział 13
W jaki sposób do zdarzenia OnClick przycisku paska narzędzi dołącza się procedurę obsługującą to zdarzenie?
Należy przejść na zakładkę Events Inspektora Obiektów, kliknąć na strzałkę rozwinięcia listy obok zdarzenia OnClick i wybrać żądana procedurę z wyświetlonej listy.
Czy na pasku narzędzi można umieszczać obiekty kontrolne inne niż przyciski?
Tak. Na pasku narzędzi można umieścić dowolny typ komponentu - najczęściej stosowanymi są obiekty combo.
Jaką nazwę nosi zdarzenie listy TActionList, na które należy zareagować implementując udostępnianie poleceń?
OnUpdate.
Do czego służy właściwość SimplePanel komponentu StatusBar?
Wymusza pojedynczy panel na pasku stanu.
W jaki sposób dokonuje się ręcznej zmiany tekstu na pasku stanu?
Dla prostego paska stanu można użyć następującego przypisania:
StatusBar.SimpleText := 'Tekst';
W jaki sposób włącza się lub wyłącza dostęp do elementów menu i przycisków?
Aby zmienić stan indywidualnego komponentu należy ustawić jego właściwość Enabled na wartość True, aby go uaktywnić i na wartość False, aby wymusić na nim stan nieaktywny. Dla większej liczby komponentów przeznaczonych do wspólnego zadania można utworzyć obiekt Action i odpowiednio ustawiać jego właściwość Enabled.
W jaki sposób w aplikacjach Delphi następuje dostęp do drukarki?
Poprzez funkcję Printer.
Jakiej metody klasy TPrinter należy użyć do rozpoczęcia drukowania?
BeginDoc.
Jakiej metody klasy TPrinter należy użyć podczas drukowania, aby rozpocząć nową stronę?
NewPage.
W jaki sposób dokonuje się zmiany kursora dla komponentu podczas pracy programu?
Poprzez modyfikację właściwości Cursor komponentu.
Rozdział 14
W jaki sposób ustawia się plik pomocy, z którego korzystać będzie aplikacja?
Należy skorzystać z okna dialogowego ustawień projektu (Project Options, strona Application) lub ustawić właściwość HelpFile obiektu Application w czasie wykonania programu.
Jak implementuje się możliwość korzystania z klawisza F1 przez określony formularz lub okno dialogowe?
Przez przypisanie właściwości HelpContext wartości różnej od zera. Trzeba również upewnić się, że wartości tej odpowiada identyfikator kontekstu pomocy w pliku pomocy i że plik ten został ustawiony dla aplikacji.
Jaką metodę wywołuje się w celu wyświetlenia indeksu dla określonego pliku pomocy?
HelpCommand.
Jakiego typu obiekty mogą zostać wygenerowane w efekcie powstania wyjątku?
Mogą to być obiekty klasy TExcetpion lub jednego z jej potomków.
Czy poprawne jest istnienie więcej niż jednej sekcji except w jednej instrukcji try?
Nie, może istnieć tylko jedna sekcja except.
W jaki sposób można wygenerować wyjątek?
Przez użycie słowa kluczowego raise - przykład:
raise EMojWyjatek.Create('Wystąpił błąd.');
Jaką wartość posiada domyślnie właściwość RootKey klasy TRegistry?
\HKEY_CURRENT_USER
Czy po zakończeniu operowania na kluczu trzeba wywołać funkcję CloseKey?
Nie. Destruktor klasy TRegistry zamknie klucz automatycznie. Mimo to nie powinno pozostawiać się otwartego klucza na czas nieokreślony.
Jaka różnica występuje między funkcjami SendMessage i PostMessage?
Funkcja PostMessage wysyła komunikat do kolejki komunikatów Windows, po czym niezwłocznie kończy swoje działanie. Funkcja SendMessage wysyła komunikat i czeka ze swoim powrotem tak długo, aż wysłany komunikat zostanie obsłużony.
Jak nazywa się metoda VCL służąca do wysyłania komunikatów bezpośrednio do komponentu?
Perform.
Rozdział 15
Jak nazywa się podstawowy (lub nadrzędny) interfejs wszystkich interfejsów w modelu COM?
IUnknown.
Co to jest GUID?
GUID jest 128-bitową liczbą całkowitą, która w sposób unikalny identyfikuje obiekt COM (interfejs, klasę lub bibliotekę typu).
Co się dzieje kiedy licznik odwołań do obiektu COM osiągnie wartość 0?
Kiedy licznik odwołań obiektu COM osiągnie wartość 0 obiekt zostanie usunięty z pamięci.
Jak nazywa się narzędzie Delphi wykorzystywane podczas pracy z bibliotekami typu?
Narzędziem służącym do modyfikacji biblioteki typu jest Edytor Biblioteki Typu (Type Library Editor).
W jaki sposób, podczas pisania obiektów COM w Delphi, tworzysz identyfikatory GUID?
Podczas tworzenia obiektów COM w Delphi nie trzeba jawnie tworzyć identyfikatora GUID. Delphi tworzy ten identyfikator automatycznie. Jeżeli mimo to chcemy utworzyć identyfikator GUID, można w Edytorze Kodu nacisnąć kombinację klawiszy Ctrl+Shift+G. Delphi utworzy wtedy identyfikator GUID i wstawi go do kodu.
Jaki element należy wybrać w Repozytorium w wypadku tworzenia kontrolki ActiveX z komponentu VCL?
Aby utworzyć kontrolkę ActiveX z istniejącego komponentu VCL należy wybrać z Repozytorium element o nazwie ActiveX Control.
Czy w Visual Basicu można wykorzystać kontrolki ActiveX stworzone w Delphi?
Tak, jest to możliwe. Trzeba jedynie zadbać o to, aby kontrolka posiadała informację o wersji.
W jaki sposób instaluje się kontrolkę ActiveX w Palecie Komponentów, po jej uprzednim zbudowaniu i zarejestrowaniu?
Aby zainstalować kontrolkę ActiveX na Palecie Komponentów należy wybrać polecenie menu Component | Import ActiveX Control.
W jaki sposób wyrejestrowuje się samodzielnie stworzoną kontrolkę ActiveX?
Kontrolkę można wyrejestrować wybierając polecenie menu Run | Unregister ActiveX Server lub uruchamiając z poziomu wiersza poleceń program TREGSVR z przełącznikiem -u dla danego komponentu. Wyrejestrowania można również dokonać poprzez okno dialogowe instalacji kontrolki ActiveX (Import ActiveX).
Czy kontrolki ActiveX stworzone w Delphi można wykorzystać na stronie WWW?
Tak. Kontrolki ActiveX stworzone w Delphi mogą być umieszczane na stronach WWW.
Rozdział 16
Jak można określić lokalną bazę danych?
Jest to baza danych rezydująca w komputerze użytkownika zamiast na serwerze baz danych. Termin ten odnosi się zazwyczaj do baz danych typu Paradox czy dBASE.
Co jest celem BDE?
BDE umożliwia aplikacjom Delphi dostęp do baz danych.
Czy zbiór danych i tabela to jedna i ta sama rzecz? Jeżeli nie, wytłumacz na czym polega różnica?
Nie, zbiór danych i tabela to nie to samo. Zbiór danych może zawierać całą tabelę lub tylko jej małą część.
Wymień zaletę wynikającą z buforowania uaktualnień.
Buforowanie uaktualnień redukuje obciążenie sieci, umożliwia modyfikowanie zbioru danych tylko do odczytu oraz pozwala na wprowadzenie szeregu zmian, a następnie wysłanie ich do bazy danych lub cofnięcie.
Czym jest procedura zapamiętana?
Jest to aplikacja rezydująca na serwerze baz danych i wykonujące określone zadania na bazie danych.
Do czego służy właściwość SQL komponentu TQuery?
Właściwość SQL zawiera zapytania SQL przeznaczone do wykonania w chwili wywołania metody Open lub Execute.
Wymień powód, dla którego opłacałoby się korzystać z własnego obiektu klasy TDatabase, zamiast z domyślnego obiektu tej klasy?
Aby umożliwić automatyczne logowanie do bazy danych.
Z jakiego powodu warto utrzymywać otwarte połączenie z odległą bazą danych nawet wtedy, gdy w danej chwili połączenie to nie jest wykorzystywane?
Aby zredukować niezbędny czas związany z logowaniem się do bazy danych przy każdym żądaniu połączenia.
Do czego służy komponent TBatchMove?
Komponent TBatchMove umożliwia stworzenie lub modyfikację jednego zbioru danych przy użyciu zawartości innego zbioru.
Czym jest alias BDE?
Jest to zbiór parametrów opisujących połączenie z bazą danych.
Rozdział 17
Jaki jest najłatwiejszy i najszybszy sposób tworzenia formularza bazy danych?
Użycie Kreatora Formularzy Baz Danych (Database Form Wizard).
W jaki sposób kontroluje się porządek i liczbę kolumn jaka pojawia się w komponencie DBGrid?
Przy pomocy Edytora Kolumn. (Kliknij prawym przyciskiem myszy na komponent DBGrid i wybierz polecenie menu kontekstowego Columns Editor.)
Jaki komponent umożliwia wyświetlenie zbioru danych w formacie tabeli?
DBGrid.
W jaki sposób można dodawać lub usuwać przyciski z komponentu DBNavigator?
Poprzez modyfikację właściwości VisbleButtons.
Jakiego komponentu należy użyć do wyświetlania danych w postaci rysunku BLOB?
DBImage.
Jaką wspólną właściwość posiadają wszystkie komponenty wrażliwe na dane?
Właściwość DataSource (między innymi).
Jaka właściwość służy do określenia pola z którym połączone zostanie komponent danych?
DataField.
Czy komponent DBGrid pozwala na zmianę uporządkowania kolumn?
Tak. W czasie projektowania należy w tym celu użyć edytora kolumn, natomiast w czasie wykonania programu skorzystać z mechanizmu przeciągnij i upuść.
Który z komponentów służy do wyświetlania i edycji pól tekstowych bazy danych?
Komponent DBEdit.
Rozszyfruj skrót BLOB.
Binary large object (duży obiekt binarny).
Rozdział 18
Jaką metodę należy wywołać, aby utworzyć tabelę bazy danych w czasie wykonania programu?
CreateTable.
Jakie przeznaczenie ma metoda Edit komponentu TTable?
Metoda Edit przestawia zbiór danych w tryb edycji umożliwiając w ten sposób modyfikację rekordów.
Jaką metodę należy wywołać jeżeli chcemy zatwierdzić zmiany wprowadzone do rekordu?
Post.
W jaki sposób tworzy się nowy moduł danych?
Poprzez Repozytorium.
Czy moduł danych jest standardowym formularzem?
Moduł danych jest bardzo zbliżony do zwykłego formularza, występują jednak pewne różnice.
Jaką metodę należy wywołać, aby wydrukować raport typu QuickReport?.
Metodę Print.
Która ze wstęg służy do wyświetlania danych ze zbioru danych?
Wstęga szczegółowa.
Który z komponentów służy do wyświetlania numeru strony raportu.
Do wyświetlania numeru strony, bieżącej daty i czasu, a także kilku innych elementów służy komponent QRSysData.
W jaki sposób można dokonać przeglądu raportu w trakcie projektowania?
Należy kliknąć na nim prawym przyciskiem myszy i wybrać polecenie Preview z menu kontekstowego.
Do czego służy komponent QRExpr?
Komponent QRExpr jest przeznaczony do wyświetlania rezultatów określonego wyrażenia.
Rozdział 19
W jaki sposób ładuje się statycznie biblioteki DLL?
Przez umieszczenie w aplikacji wywołującej deklaracji procedur i funkcji biblioteki DLL z użyciem słowa kluczowego external. Biblioteka DLL zostanie załadowana automatycznie przy starcie aplikacji.
W jaki sposób ładuje się dynamicznie biblioteki DLL?
Używając funkcji Windows API LoadLibrary.
Jak wywołuje się funkcję lub procedurę z biblioteki DLL, która została wczytana w sposób statyczny?
Funkcję tego typu wywołuje się tak samo jak, dowolną inną funkcję należącą do aplikacji.
Jakie kroki należy przedsięwziąć aby mieć pewność, że procedura lub funkcja w bibliotece DLL będzie mogła być wywoływana z zewnątrz?
Funkcja musi zostać wyeksportowana z biblioteki DLL. W tym celu należy umieścić ją w sekcji exports biblioteki DLL.
Czy w przypadku dynamicznego załadowania biblioteki DLL do pamięci, można usunąć ją w dowolnej chwili, czy jest to możliwe tylko przy zakończeniu aplikacji?
Usunięcie biblioteki z pamięci jest możliwe w dowolnej chwili (przy użyciu funkcji FreeLibrary).
Co trzeba zrobić, aby móc wyświetlić formularz Delphi zapisany w bibliotece DLL w programie nie pochodzącym ze środowiska Delphi?
Utworzyć funkcję eksportową, do której będzie mogła odwołać się aplikacja wywołująca. We wnętrzu tej funkcji trzeba umieścić kod odpowiedzialny za utworzenie i wyświetlenie formularza. Funkcja musi być zadeklarowana z użyciem słowa kluczowego stdcall.
Jak nazywa się słowo kluczowe służące do deklarowania funkcji i procedur importowanych z biblioteki DLL?
external
W jaki sposób zasoby są umieszczane w bibliotece DLL?
Przez dołączenie do biblioteki DLL pliku zasobów (.res lub .dec) przy użyciu dyrektywy kompilatora $R - przykład:
{$R Zasoby.res}
Czy biblioteka zasobów musi, oprócz zasobów, zawierać również kod?
Nie. Biblioteka DLL może nie posiadać kodu.
Czy biblioteka zawierająca zasoby może zostać załadowana statycznie (w chwili startu programu)?
Jest to możliwe, jednak konieczność statycznego ładowania zasobów występuje niezwykle rzadko. Uzyskanie dostępu do zasobów wymaga wartości zwracanej przez funkcję LoadLibrary, stąd równie dobrze można zastosować ładowanie dynamicznie.
Rozdział 20
Czy właściwość musi korzystać z metody write? Uzasadnij swoją odpowiedź.
Nie. Zamiast metody write można zastosować dostęp bezpośredni.
Czy właściwość musi posiadać skojarzone pole danych? Uzasadnij swoją odpowiedź.
Nie, właściwość nie musi posiadać skojarzonego pola danych, ale większość właściwości zwykle je posiada. Właściwość nie przechowująca wartości jest raczej nietypowa.
Czy można zbudować komponent przez rozbudowę komponentu istniejącego?
Naturalnie. Jest to najprostszy sposób tworzenia nowych komponentów.
Co się stanie jeżeli w deklaracji właściwości nie zostanie określony specyfikator write (w postaci metody lub dostępu bezpośredniego)?
Właściwość będzie możliwa tylko do odczytania.
Co oznacza dostęp bezpośredni?
Oznacza to że skojarzone pole właściwości jest zapisywane i/lub odczytywane w sposób bezpośredni (nie ma metod read i write).
Czy właściwości muszą posiadać wartości domyślne? Uzasadnij swoją odpowiedź?
Nie, wartość domyślna jest opcjonalnym elementem właściwości. Wartość domyślną powinny jednak posiadać właściwości publikowane. Wartości domyślnych nie mogą posiadać właściwości typu string (jak również kilka innych).
Czy ustawienie wartości domyślnej dla właściwości powoduje automatyczne przypisanie jej do skojarzonego pola danych?
Nie, zdefiniowanie wartości domyślnej powoduje jedynie wyświetlenie jej przez Inspektor Obiektów w czasie projektowania. Przypisanie wartości domyślnej do skojarzonego pola danych musi zostać przeprowadzone w konstruktorze komponentu.
W jaki sposób komponent jest instalowany w Palecie Komponentów?
Poprzez użycie polecenia menu Component | Install.
W jaki sposób określa się bitmapę przycisku, która będzie reprezentowała komponent na Palecie Komponentów?
Należy stworzyć plik .dcr o nazwie odpowiadającej nazwie pliku źródłowego komponentu. Plik .dcr powinien zawierać bitmapę o wymiarach 24×24 i nazwie odpowiadającej nazwie klasy komponentu. Utworzony plik musi znaleźć się w tym samym katalogu, w którym znajduje się plik .pas komponentu.
W jaki sposób wywoływane są zdarzenia definiowane przez użytkownika?
Przez wywołanie tego zdarzenia po wcześniejszym upewnieniu się że została zdefiniowana obsługująca go procedura:
if Assigned(FOnZdarzenie) then
FOnZdarzenie(Self);
Rozdział 21
Czy pliki projektów Delphi i Buildera C++ posiadają takie same rozszerzenia?
Nie, rozszerzenia plików projektów w Delphi i Builderze C++ są różne. Pliki projektów w Delphi noszą rozszerzenie .dpr, natomiast w Builderze C++ .bpr.
Czy pliki formularzy Delphi i Buildera C++ posiadają takie same rozszerzenia?
Tak. W Delphi i Builderze C++ pliki projektów noszą rozszerzenie .dfm.
Czy w Delphi i Builderze C++ można wykorzystać pakiety pochodzące od niezależnych producentów komponentów?
W większości wypadków zarówno Delphi i Builder C++ mogą korzystać z zewnętrznych pakietów danych. Czasami zajdzie konieczność ponownego zbudowania pakietu w Builderze C++. Skontaktuj się z twórcą pakietu, aby dowiedzieć się o możliwość jego współpracy z Builderem C++.
Czy plik formularza Delphi może zostać otwarty w Builderze C++?
Tak, ale nie można go edytować (dodawać lub usuwać komponenty).
Czy w Projektancie Formularzy Buildera C++ można dokonać edycji pliku formularza Delphi?
Nie, nie można edytować pliku formularza Delphi przy użyciu Projektanta Formularzy Buidlera C++. Można za to edytować go jako plik tekstowy po wybraniu opcji View As Text.
Czy w Delphi można użyć modułu źródłowego Buildera C++?
Obecna wersja Delphi nie pozwala na użycie modułów kodu źródłowego z Buildera C++.
Które z produktów jest lepszy: Delphi czy Builder C++?
Żaden z tych produktów nie jest lepszy od drugiego. Oba cechują się swoimi mocnymi stronami. Wszystko zależy od tego jaki język preferujemy: Pascal czy C++.
Rozdział 22
Jaka kontrolka służy do wyświetlania stron WWW?
THTML.
Jaka kontrolka służy do łączenia z grupami dyskusyjnymi?
TNMNTP.
Jak nazywa się metoda służąca do wyświetlania dokumentu HTML przez kontrolkę THTML?
RequestDoc.
Jakie zdarzenie jest generowane w chwili zakończenia ściągania dokumentu HTML?
OnEndRetrieval.
Jaka kontrolka służy wysyłania wiadomości pocztowych?
TNMSMTP.
Jaka kontrolka służy do odbierania wiadomości pocztowych?
TNMPOP3.
Jak nazywa się metoda służąca do wysyłania poczty przez kontrolkę TNMSMTP?
SendMail.
Czy kontrolka ActiveX Internet Explorera może być rozpowszechniana bez żadnych ograniczeń?
Nie, trzeba uzyskać licencję od firmy Microsoft pozwalającą na jej dystrybucję.
Jak nazywa się narzędzie służące do rejestrowania kontrolek ActiveX?
TREGSVR.EXE.
Jak nazywa się firma dostarczająca komponenty internetowe wchodzące w skład Delphi?
NetMasters.
864 C:\Dokumenty\Roboczy\Delphi 4 dla kazdego\a.doc
C:\Dokumenty\Roboczy\Delphi 4 dla kazdego\a.doc 863
864 Dodatki
Dodatek A ♦ Odpowiedzi do pytań 863