Odpovědi na vypečené otázky

PŘEDNÁŠKA ČÍSLO 1

 

1)k čemu slouží Unit v programu jazyka Paskal Obecně ,bez vztahu na delfi

Unity slouží ke zpřehlednění programování, logickému rozdělení programu a izolaci jednotlivých objektových tříd.

2)Jak používaji Unity Delfi

Každé okno (Form) má svou vlastní unitu automaticky, jinak stejné jako v Pascalu.

Jako knihovnu konstant, typů, proměnných, procedur a fcí napsaných v jazyku  Pascal, je umístěna hned na začátku programu (generována automaticky)

3)Jaká je struktura Unit

Unit jmeno_unity;

Interface

…deklarace uses, const, type, var a deklarace funkcí

Implementation

…odprogramování funkcí (metod) unity, prostor pro vlastní kód.

4)  Popište rozdíl mezi globální ,skrytou globální a lokální proměnou

globální: deklarována v interface sekci unity, je „viditelná“ i vně unity

skrytá globální: deklarována v implementation sekci unity, „viditelná“ pouze uvnitř unity, ve které je deklarována.

lokální: deklarována ve funkci/proceduře, použitelná pouze v rámci funkce/procedury

5)Jaká je struktura řídícího proframu Delfi 

program Project1;

uses

Forms,

Unit1 in ‚Unit1.pas‘ {Form1};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

6) Které soubory většinou tvoří zdrojové texty aplikace v Delfi

*.dpr     řídící program, zdroj. soubor programu

*.pas     vygeneruje se za každý nový form, zdroj. soubory jednotek

*.res      zdroje windows

*.dfm    uložení definic formulářů

*.exe      spustitelný soubor generován překladačem

7)Co je VCL –Visual component Library

VCL – knihovna předdefinovaných vizuálních komponent Delphi, základní kámen při tvorbě aplikací.

8) Kdo je Prapředek všech objektů v Delfi

je to třída TObject.

9)Vysvětlete pojmi objektová Třída ,Objekt ,Instance objektu

objektová třída : deklarovaný typ, podobný recordu, ale navíc má metody (a v Delphi i properties)

objekt : ukazatel na konkrétní objektovou třídu, zatím nelze volat metody třídy

instance objektu : objekt po přidělení paměti a volání konstruktoru, použitelný pro další práci

 

 

10)Co je metoda speciálně konstruktor ,destruktor 

metoda – funkce/procedura deklarovaná v rámci třídy

konstruktor – speciální procedura, která je volána pro vytvoření instance třídy

destruktor – speciální procedura, která je volána pro zrušení instance třídy

11) Jak vzniká formulář a proč je jednou z nejdůležitějších komponent

formulář vzniká po inicializaci a před spuštěním aplikace ( viz zdroj projektu, application.createform(…);).

Formulář je hlavní prostředek komunikace mezi uživatelem a aplikací, je (většinou) vlastníkem dalších vizuálních prostředků (tlačítek atd.)

12)Jak vzniká objekt Aplikation a ,které jho metody už známe

Je implicitně definován pro každou aplikaci v Delphi, vzniká před spuštěním samotného zdroje projektu. Známe metody initialize, createform a run (ze zdroje projektu).

 

13)Charakterizujte OS WIN

Je to multitaskingové prostředí, kde každý task(úloha, proces, aplikace) je reprezentován jedním(nebo více) oknem. Jsou v něm zaneseny základní funkce pro vytváření a správu oken.

14)Co zanmený Prementyvní a Kooperativní multitasking

preemptivní multitasking: aplikace běží nezávisle na sobě, mají vlastní paměťový prostor a o přiřazování času aplikacím se stará OS.

Kooperativní: aplikace jsou na sobě závislé, protože o přidělování času aplikacím nerozhoduje OS, ale aplikace mezi sebou.

15) Co je v terminologii Win zparvá a jak jí Win zpracovávají

Zpráva ve win jsou data typu record, které posílají win aplikaci jako oznámení o výskytu nějaké události, aby na ni mohla aplikace reagovat. Zpracování probíhá zavoláním procedury pro zpracování zpráv daného okna s konkrétní zprávou jako parametrem.

16) Kolik front zpráv Win udržují

Udržují jich tolik kolik je volných aplikacích

17)Co znamená ,že D5 jsou dvojcestný nástroj

Frontu zpráv má každá aplikace, která pak zprávy rozesílá dále do svých oken. Každé okno typu TWinControl má svoji proceduru pro zpracování zpráv.

18)Co se zobrazuje v Objekt Inspektoru

Vlastnosti komponent

19)Jak naprogramuji obsluhu události ON CLick

Najedu na komponentu pro ,kterou chci dělat procedur u a 2x kliknu na ní levím tlačítkem

myši

 

PŘEDNÁŠKA ČÍSLO 2

 

  1. Které vlastnosti vizuálních komponent jsou pro vizualizaci nejdůležitjší

Height-výžka

Width-šířka

Left-poloha levého horního rohu z leva

Top-poloha levého horního rohu z hora

Visible- nastaví viditelnost (neviditelnost) komponenty

22.Která vlastnost je pro manipulaci s komponentou rozhodující

její jméno v programu (Name)

23.Čemu říkáme „zaměření“ komponenty

Aktivní komponenta má zaměření (Focus)

24.Které komponenty mohou získat zaměření

všechny vizuální komponenty mohou získat zaměření

 

 

25.V jakém pořadí se „controls“ zpracovávají

zpracovavájí se podle indexu  v seznamu taborders

Podle hodnoty ve vlastnoti TabOrder  začínající od 0, odpovídá pořadí v jakém je umisťujeme na plochu, lze podle potřeby měnit.

26.Jak lze toto pořadí změnit – vizuálně

Pořadím kterým pokládám komponenty na plochu formuláře

27.Jak lze toto pořadí změnit pomocí OI

Zmněnou hodnoty indexu taborder

28.Jakou metodou lze řídit předání zaměření nějakému control

Setfocus popřípadě voláním zprávy Perform(wm_NextDlgCtl,0,0)

29.Kdy lze jednou metodou ošetřit víc událostí

Pokud jsou události stejného typu pak lze použít stejnou metodu

30.Jakou funkcí můžu předat řízení – zaměření control přirozeně následujícímu (co se v té chvíli děje)

Perform(wm_NextDlgCtl,0,0) každá komponenta generuje událost OnEnter při zisku zaměření a OnExit když jej ztratí

Stiskem klávesy Tab, zaměření se předá komponentě, která má o 1 vyšší hodnotu v TabOrder než aktuální komponenta. Není-li již žádná vyšší, tak přeskočí na první

31.Ve které události lze odchytit znak vyslaný z klávesnice

onKeypres

 

32.Bude správně fungovat níže uvedená sekvence v této události, když  má dovolit příjem znaku číslic a na <ENTER> má předat řízení  následujícímu control v definovaném pořadí

 if not (Key in [‚0‘..’9′]) then Key:=#0;

 if Key=#13 then Perform(wm_NextDlgCtl,0,0);

Nebude protože nejprve nastavíme hodnotu Key na nulu a pote ověřime jestli to nebyl enter

33.jakým prostředkem lze vizuálně pracovat s blokem komponent 

menu View->Alignment Palette

34.Jakého typu je hodnota zapsaná v Edit a Která vlastnost je nositelem tohoto         

vstupu

je typu String; je to vlastnost Text.

35Jaké funkce realizují konverze Sringu a Integer

StrToInt (funkce windows), val (pascal fce).

36.TRadiogroup-která vlastnost nese textový popis volby

je to vlastnost Items

37.Jak ošetříme volbu v TRadioGroup- událost a vlastnost, kterou je potřeba použít

OnCLick(pro jistotu ještě udalost OnExit) a vlastnost Radiogup1.ItemIndex

38.Kterou vlastnost je potřeba testovat u CheckBoxu, abychom ošetřili uživatelovu   volbu

Checked

39,K čemu slouží properte Anchor u vizuálních komponent

Uzamyká rohy komponenty na fixní vzdálenosti od okraje Parent komponenty

40.Které Vlastnosti dovolí řídit přístup k ovládacím prvkům – Potlačí nebo naopak zpřístupnit daný prvek

vlastnost Enabled (true/false).

 

PŘEDNÁŠKA ČÍSLO 3

 

  1. Jaká vlastnost uvede časovač do chodu

Enable

  1. Na co je třeba dát pozor při programování události OnTimer

Na nastavení intervalu a aby aplikace neobsahovala zbytečně mnoho timerů

Aby v její deklaraci nebyl přípiž dlouhý kód

  1. 43. Jaké funkce dovolují pracovat s datumem a časem

Date a Time :TDateTime

DatetoStr,TimeToStr

  1. Jak je implementován datum v D5

jako reálné číslo jehož celá část je datum od 30.12 1899

desetiná část je zlomek dne

  1. Posunu-li panel na kterém je komponenta Label jak se změní určení její polohy

Relativně vůči panelu se její poloha nezmnění ale vůči formulaři s posune společně z panelem

  1. Které vlastnosti vytvoří dojem 3D Panelu

BevelInner, BevelOuter, BevelWidth, BorderWidth, BorderStyle

  1. K čemu slouží komponenta Splitter

K rozdělení plochy formulaře a možnosti dynamicky měnit velikost za běhu

  1. Které komponenty mohu použít pro přímý vstup číselných dat

SpinEdit,UpDown +Edit,MaskEdit

  1. Jak vytvořím „stavový řádek“ ve svém okně, která vlastnost jej dovolí dělit na části

Přidáním komponety STatusBar na plochu. Vlastnost Panels

  1. Jakou komponentu lze použít pro práci s víceřádkovým textem

Memo a RichEdit

  1. Která vlastnost této komponenty obsahuje text a jakého je typu

Lines:TString (Pole stringů indexované od nuly)

  1. Pokud chceme do této komponenty načíst soubor, jak je možné to naprogramovat

1) Memo.Lines.LoadFromFile(‚cesta k souboru‘)

2)      if OpenDialog1.Execute then

begin

Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

Caption := ExtractFileName(OpenDialog1.FileName);

end;

 

53 . Jak Vybrat soubor z libovolné jednotky daného PC

lze pomocí komponenty  OpenDialog, nebo vl. Initialdir

  1. Jakou metodou komponenty OpenDialog a Save Dialog lze tento aktivovat

Execute

  1. Jaký je výsledek volání této metody

je typu boolean True pokud dojde k vybraní souboru

Otevře se standardní okno windows pro načítání souborů a po vyhledání souboru se do Opendialogu uloží cesta k němu.

  1. Které metody objektové třídy TStrings znáte – uveďte alespoň 4

Add, clear, insert, move, exchange, loadfromfile, savetofile

57.Jaké vlastnosti umožní předdefinovat nastavení dialogu tak, aby zobrazoval soubory „nějakého“ typu, předdefinoval příponu zobrazovaných souborů, určí počáteční adresář

Filter-Filtr souborů podle přípon, InitialDir-Počáteční adresář

58.Rodné číslo je řetězec 11 znaků  naprogramujte funkci ,která bude vracet informaci o tom zda-li z Rč ,které je jediným parametrem fce vyplívá ,že se jédná o muže nebo ženu nebo o dítě ,za dítě považujeme osobu do 15 let .

 

PŘEDNÁŠKA ČÍSLO 4

 

59.Jak lze vložit text do ListBoxu , RadioGroup (uveďte alespoň 3 možnosti)

Napsáním v Object Inspektoru, přidáním za běhu ListBox1.Add(‚Ahoj‘), přiřazením z jiné datové struktury stejného typu

  1. Jak lze totéž udělat v ComboBoxu

Prakticky stejným způsobem přidáním do Items je to stejný datový typ

  1. Lze zjistit počet řádek v Memo nebo RichEditu

Ano vlastnost Memo.Lines.Count

  1. Jak lze vyprázdnit jakýkoli seznam nebo víceřádkový text – memo

Voláním metody Clear

  1. Co vyplývá z vlastnosti Parent

Kdo je rodičem komponenty Parent – rodič je vlastnost týkající se pouze ovládacích prvků používaných v Win a komponent odvozených od  třídy TControl. Pokud má komponenta rodiče je mu podřízena, rozhoduje o tom kam se komponenta umístí, o tvaru, barvě,.., lze menit za běhu

  1. Co vyplývá z vlastnosti Owner

Kdo je vlastník komponenty Owner – vlastník je komponente přidělený v době jejího vzniku tj. v čase kdy se realizuje konstruktor komponenty, za běhu ji nelze změnit. Rodiče ano! Vlastník rozhoduje, kdy je jim vlastněný objekt RUŠEN a uvolněna  obsazena  OP. Každá komponenta, která má schopnost vlastnit jiné komponenty si udržuje seznam vlastněných komponent v COMPONENTS jejich počet ComponentCount

  1. Kdo může být Parent

Object typu TWinControl

  1. Jaký je rozdíl mezi metodami Free a Destroy

Free kontroluje existenci instance objektu destroy nikoli

  1. Může být Parent komponenty změněn na jiné okno téže aplikace, změní se při této změně její Owner

Parenta změnit lze ale Owner zůstává pořád stejný

  1. Které vlastnosti umožňují vytvoření plovoucí nápovědy

Hint – zde zadám text nápovědy, showhint – provede vizualizaci nápovědy

  1. Jak lze přidat do aplikace nové okno a jak se to projeví v *.dpr

Pomoci menu File/New Form a v *.dpr se to projevý dalsím řadkem Application.CreateForm(..)

  1. Jakou metodou okno „zviditelníme„ a předáme mu „Focus„

Form2.Show nebo .ShowModal

  1. Jaký je rozdíl mezi metodou Show a ShowModal

ShowModal nedovoluje přepnout na starý druhý formulař dokud není ukončen ten zavolaný. Show to umožňuje.

  1. Lze zrušit v *.dpr řádek Application.CreateForm(…)? Co to znamená pro aplikaci

Nedojde k vytvoření dalšího formulaře.ALe jinak tento řadek zrušit lze.

  1. Který formulář je hlavní v aplikaci s více okny – jak to poznám v *.dpr – za předpokladu, že do *.dpr nezasahuji dalším kódem

Je vždy uveden v *.dpr jako první v deklaraci Application.CreateForm(..)

  1. Co programátor ztrácí, když má komponenta vzniknout až za běhu programu a co naopak získá

Získá možnost vytvořit mnoho komponent najednou bez toho je manuálně dosazovat z knihovny komponent.

Jediné co strácí je přístup ke všem vlastnostem daných komponent.

  1. Definice které vlastnosti nesmí v kódu aplikace chybět, abychom viděli komponentu vytvořenou za běhu aplikace

Parent, Visible, a pro definici umístění Left, Top, Hight, Width

  1. Jak vzniká instance komponenty v paměti

 M := TForm.Create(self)

Zavoláním metody constructor, na pointru objektu se zavola construktor objektu pr.objekt:=objekt.create(ovner);

  1. Která vlastnost dovoluje definovat plovoucí nápovědu a která rozhoduje o jejím zobrazení

Hint,ShowHint

  1. Chci-li nadefinovat komponentě instalované do OP za běhu obsluhu události např. OnClick jak to naprogramuji

B.Onclick:=Klick; Klick Je procedura s odpovídající hlavičkou pro danou událost

  1. Jaký význam má parametr SENDER

Sender je odesilatel pro všechny definice až na událost OnDragDrop kde je příjemcem.

  1. Když chci se Sendrem pracovat jak určím jeho typ (zatím) – nekontrolované přetypovaní . Proč to musím udělat?

Abych zaručili kompaktibilitu jednotlivých typů přetypovaní provedu pomocí operátoru „as“

  1. Kdy v seznamu mohu použít vícenásobný výběr a jak přenesu vybrané položky jinam např. do stringu komponenty Label.

Když je vlastnost Multiselect nastavena na True pomocí cyklu for a vlastnosti Listboxu Selected která tvoří pole stringů.

tlistbox.multiselect musí byt true,vybranne položky lze je v cyklu testovat pomoci

tlistbox.selected(index,),načítat přes t listbox.items.strings(index)

 

PŘEDNÁŠKA ČÍSLO 5

 

  1. Jak lze zjistit a vložit seznam nainstalovaných fontů do ComboBoxu

Vložením nevizuální komponenty FontDialog

ComboBox1.Items := Screen.Fonts;

ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(Memo1.Font.Name);

  1. Jak nastavíme v tomto ComboBoxu ukazovátko na font, který používá Memo

 pomoci ověřovacího cyklu For

For I := ComboBox1.Items.Cound-1 to 0 do

If  ComboBox1.Items[I]=Memo1.Font.Name then ComboBox1.ItemIndex :=I;

  1. Jak připojíme seznam ikon (obrázků) k Menu,k ToolBaru a dalším prvkům aplikace

Pomoci prvku ImageList a vlastnosti jednolivých komponent Images

U každé komponety na které chceme mít ikonu nastavíme Imageindex podle pořadí v imagelistu

  1. Kdy využíváme TimageList

Když chceme používat ikony, obrazky na komponenty

  1. Mohou být obrázky seznamu TImageList odlišné velikosti, jak lze k jednotlivým obrázkům přistupovat

Obrázky mohou mít odlišnou velikost, pomocí vlastnosti ImageIndex

  1. Jak vytvoříme v ToolBaru skupinu tlačítek, které pracují s vlastností, které se navzájem vylučují

Nastavením vlastnosti gruped na True.

 

 

  1. Jak vytvoříme v ToolBaru skupinu tlačítek, které pracují s vlastnostmi, které mají aditivní charakter

Nastavením vlatnosti tlačítka Style na tbsCheck

  1. Jak se tvoří úplná plovoucí nápověda ( Hint)

Pomoci Aplication.Hind a nastavením ShowHint na True

Nejprve nápovědu povolíme vlastnost ShowHint:=True, pak napíšeme text nápovědy do vlastnosti Hint, můžeme také pomocí metody Application.Hint,showhint.onhint hintcolor,hintpause

  1. Jak lze zobrazit část nápovědy např. ve stavovém řádku v jeho druhé části

Musím nastavit proceduru pro nápovědu do hodnoty Application.OnHint

Poté do procedury definujeme definujeme kam se má vypsat nápověda v tomto případě StatusBar1.Panels[1].Text

Text nápovědy se definuje do property hind ve stylu: první část | druhá čast

 

 

 

  1. Jak lze zobrazit část nápovědy např. ve stavovém řádku, který bude mít jednoduchý tvar

Postup je stejný jako v minulé části pouze je jednoduší o to že stačí definovat vlastnost simpletext panelu a

property Simplepanel na true

Statusbar.Panels[0].text:= ‘text napovědy’

  1. Které vlastnosti nápovědy lze řídit globálně a jak

Pomocí funkcí Aplication.Hind, HindPause, HindColor

  1. Které předdefinované informační okna máme k dispozici

ShowMessage, MesageDlg, MesageBox,MesageDlgPos

  1. Které předdefinované okna pro vstup textu máme k dispozici a čím se liší v použití

InputBox – lze u něj definovat popisný text, předdeinovanou hodnotu a hlavičku okna

InputQuery – pro něj lze definovat vše pouze tytulek okne ne

  1. Na které události lze reagovat stejnou metodou – procedurou pro obsluhu události

Udalost musí mit stejnou hlavičku metody.

  1. Jak zjistím jméno toho, komu obsluha události patří – předpokládám, že stejnou procedurou obsluhuji onclick všech prvků typu TButton, které Form vlastní

Pomocí přetypování (Sender as TButton).Name

  1. Jak předám řízení i-tému controls, když je tento je i-tým prvkem pole controls

Controls[i].

  1. Porovnejte komponenty SpinEdit, SpinButton,UpDown

SipnEdit – Sdružuje vlastnosti UpDown a Editačního pole, SpinButton má dvě oddělené události pro klik na spodní a horní tlačítko, UpDown – tuto událost nerozlišuje

SpinEdit – zvvětšuje a zmenšuje hodnotu ve svém editačním okně

SpinButton – pomocí nej lze měnit zaměřování jednotlivých komponent událost

Focus Control

UpDown – lze vložit do nejakého okna pomocí události Asociate

  1. Kdy se rozhodujeme pro použití komponenty ScrollBox

Pokud máme příliš mnoho údajů na vypsání nebo na výběr pro uživatele

  1. Vysvětlete parametr self – kde a proč se vyskytuje

Implicitní parametr všech metod, odkazuje na instanci objektové třídy, které příslušná metoda patří a pro kterou je volána

 

KONTROLNÍ OTÁZKY Č.6

 

  1. Definujte metodu Drag&Drop

Uchop a opusť slouží k předávaní vlastností dvou komponent

  1. Které vlastnosti určují metodu Drag&Drop

DragMode, DragKursor, DragKind

  1. Které události pro naprogramování metody Drag&Drop lze použít

OnDragDrop, OnEndDrag, OnDragOver,OnStartDrag

  1. Co znamená v parametrech události spojených s Drag&Drop Target a Source

Target=cíl,       Source=zdroj

  1. Předejte tvar cílovému Shapu ze seznamu možných tvarů pro komponentu TShape, které jsou v Comboboxu popsané česky...

Do Comboboxu uložíme české názvy v přesném pořadí v jakém jsou definovány tvary pro komponentu Shape.

Tvar poté určí pořadí v comboboxu. Tohle pak definujeme pro událost DargDrop Shapu.  Shape1.Shape :=TShapeType(ComboBox1.ItemIndex);

Jeste se nesmi zapomenout na nastavení vlastnosti Dragmode a události OnDragOwer pro to aby byli akceptovány data z přetažení

if sender is TCombobox then

shape1.shape:=TshapeType(TComboBox(Sender).ItemIndex)

 

 

 

 

 

 

 

 

 

  1. Přeneste barvu písma jednoho ze 3 možných labelů na Shape

Princip je opět stejny jako u otazky předchozí akorát

Pro událost DragOver pro shape1

begin

if  (source is tlabel) then

accept:=true

end;

 

pro událost DragDrop pro shape1

begin

if (source is tlabel) then

shape.brush.color:=tlabel(source).font.color;

end;

u všech labelu bude v properties dragmode-dmAutomatic a Dragkind -dkDrag

  1. Napište definici 6 – prvkového pole konstant typu Tcolor

const

Pole: array[1..6]of TColor =(1,2,3,4,5,6);

Lze použít i definici RGB palety nebo konstanty definovane delphi např. clRed

  1. Napište instanci 10-prvkového pole Labelů, které mají automaticky poskytovat svoji popisku – text k přetažení na jinou komponentu. Labely ať jsou seřazené ve sloupci

 

  1. Jak naprogramuji výměnu dvou položek seznamu tahem myší

pro udalost OnDragDrop

var NovyIndex:Integer;

begin

NovyIndex:= ListBox1.ItemAtPos(Point(X,Y),true);

ListBox.Items.Exchange(ListBox1.ItemIndex,novyIndex);

end;

  1. Co je to dockování

Ukotvovaní, lze ukotvit komponentu i mimo plochu formulaře.

  1. 110. Jak lze pohybovat v aplikaci komponentou

Nastavím property

DragMode:= dmAutomatic;

DragKind:=Dmdock;

  1. Lze pohyb komponentou dockováním aplikovat na všechny komponenty

Ano, v podstatě ano ale je v tom jeden haček – ale jde to jen u vizuálních komponent, ale nejsem si tím uplně jistý J

  1. Kdo je přímý předek vizuálních a kdo nevizuálních komponent – u vizuálních to je Tcontrol; u nevizuálních je to – tcomponent

113.Jaký je rozdíl u potomků TgraphicControl a TwinControl  – Jde o to že TWincontrol je základní třída pro všechna ovládání u oknových aplikací (obrazky, speedbutton, shape, atd.) a TGraphiccontrol je základní třída pro veškeré neoknové uživatelské ovládání (velikosti, urovně okraju, atd.)

  1. Co znamená přetěžování funkcí-

definování funkce vícekrát

  1. Vymyslete si případ přetížení funkce, co nesmíte v definici zapomenout-

function Min(A,B: Integer): Integer; overload;

function Min(A,B: Int64): Int64; overload;

function Min(A,B: Single): Single; overload;

function Min(A,B: Extended): Extended; overload;

klíčové slovo overload, přetěžované funkce se musí lišit alespoň počtem nebo typem parametrů

  1. Jak se používají implicitní parametry při volání funkcí a procedur – jak je lze vynechat

Nesmim použít var, možnost nastavrní hodnoty parametru uživatelem, parametr musí být pouze konstanta, při změně se hodnota parametru zachovává od rodičů

  1. K čemu slouží operátor is a as – vysvětlete rozdíl v použití-operátor is-každá objektová třída umí zjistit rodiče a typ,operátor as-parametry jsou opět objekt a oběktová třída,ale výsledek je objekt převedený na nový typ třídy pokud je to možné

118.Explicitní přetypování např Tedit(Sender) a přetypování pomocí as je stejné nebo se v něčem liší?

Liší se v tom, že u případu ´as´  v případě „nemožnosti“ tohoto přetypování dojde k vyvolání výjimky – typu nekompability (EInvalidCast) – podobný případ jako explicitní přetypování

 

 

 

Odpovědi na vypečené otázky – pokračování

 

  1. J Uveďte jakými komponentami by bylo možné ilustrovat dynamiku nějakého procesu

Protože stále některé procesy trvají dlouho, je nutné aby uživatel byl informován o tom, jak daleko zpracovávání pokročilo (resp. že vůbec probíhá, někdy nastavit myšku na přesýpací hodiny)

Komponentami Gauge, ProgressBar, TrackBar, ScrollBar

  1. Zjistěte seznam souborů daného adresáře a vypište do Radiogroup všechny typy souborů (podle přípony), které se v daném adresáři vyskytují

Použiji komponentu FileListBox, nastavím požadovaný adresář pomocí vlastnosti Directory.

var loop1:integer;

for loop1:=0 to Filelistbox.Items.Count-1 do

if RadioGroup1.Items.IndexOf(ExtractFileExt(Filelistbox.Items.Strings[loop1]))=-1 then

RadioGroup1.Items.Append(ExtractFileExt(Filelistbox.Items.Strings[loop1]));

end;

  1. Jak zjistím všechny dostupné diskové jednotky v počítači, kde běží aplikace

Přes komponentu DriveComboBox a vlastnost Items.

  1. Jak naprogramuji pohyb komponentou za běhu aplikace

var drag:boolean;

x0, y0:Integer;

v OnMouseDown komponenty

x0:=x;

y0:=y;

drag:=true;

v OnMouseUp

drag:=false;

v OnMouseMove

if drag then begin

Komponenta.Left:=Komponenta.Left+(x-x0);

Komponenta.Top:=Komponenta.Top+(y-y0);

end;

Převzato z vypracovaných odpovědí z CD, ale nezkoušeno.

  1. K čemu slouží objektová třída Tbitmap

K zobrazování a manipulaci s obrázky z disku nebo z paměti. Automaticky se překreslí, je-li třeba.

  1. Jak se při programování kreslení dostanu k funkcím GDI – zatím u komponenty Tomate

Image.Canvas – plátno, obsahuje všechny potřebné objekty a metody.

  1. Uveďte funkce pro převod dvou integerových hodnot na typ TPoint a 4 integerových hodnot na typ TRect

Použiji funkce point(x,y) a funkce rect(x1,y1,x2,y2).

  1. Kdy bude správně fungovat přeřazení Image.Picture do Bitmapy Assign(Image1.Picture); když B:TBitmap;

V případě, že Picture v Image je bitmapou (tedy nikoli vektorový či meta-obrázek)

  1. Čím se liší grafický formát bmp od wmf a emf – porovnejte

BMP je po pixelech uložený obrázek, zatímco wmf a emf může navíc obsahovat i vektorově kreslený obrázek (obrázek popsaný funkcemi, lépe se zvětšuje, otáčí apod.)

  1. Jaká funkce TCanvas zkopíruje obdélník jedné bitmapy do druhé bitmapy

Canvas.CopyRect.

  1. Lze kopírovat obdélníkovou část z TImage, pokud jsme do jeho Picture metodou LoadFromFile načetli soubor typu wmf, když ano – proč, když ne – proč

Ne, wmf a emf neuchovává (prý) svůj obraz ve formě kopírovatelných bloků pixelů.

  1. Napište kód procedury,ve které načtete obr.bmp z aktuálního adresáře do B, kde B je typu Bitmap a je lokální proměnnou dané procedury.

B.LoadFromFile(‚obr.bmp‘);

 

 

 

 

 

 

 

  1. Rozložte obrázek uložený v bitmapě Image1 na pole mxn stejných obrázků Im[i,j],  napište celý kód, který bude „rozklad“ realizovat na stisk tlačítka Button1.

procedure TForm1.Button1Click(Sender: TObject);

var

i,j,k,l: integer;

begin

for I := 1 to 5 do

for J := 1 to 5 do

begin

Im[I,j].Free;

Im[I,J] := nil;

end;

k:=image1.Width div spinedit1.value;

l:=image1.Height div spinedit2.value;

for i:=1                to spinedit2.Value do

begin

for j:=1 to spinedit1.Value do

begin

im[i,j]:=timage.create(self);

with im[i,j] do

begin

Width := K;

Height := L;

Left := 5 + (J-1) * (K+5);

Top := 5 + (I-1) * (L+5);

parent := Panel1;

canvas.CopyRect(rect(0,0,K-1,L-1),

Image1.Canvas,

Rect(((J-1)*K),((i-1)*L),(j * k)-1,(i*L)-1));

end;

end;

end;

end;

  1. Jak lze zjistit – vypsat do seznamu všechny komponenty Form1, Panel1, Application

Seznam je Memo

var loop:integer;

for loop:=0 to application/form.ComponentCount-1 do

Memo.Lines.Append(application/form.Components[loop].Name);

Tento příklad prakticky odzkoušen!

  1. Bude tento seznam obsahovat jména všech komponent o kterých např. Form ví

Ne, bude obsahovat pouze komponenty, jejichž je buď přímo nebo zprostředkovaně (přes jinou komponentu, např Panel) Ownerem a které byly přidány při designu, ne v runtime.

  1. Co znamená copy-on-write při metodě assign

Při použití Assign se pouze sdílí paměť, k fyzickému zkopírování obsahu jinam dochází až při pokusu o změnu obsahu zdroje či kopie.

  1. Co je PIXEL

Nejmenší adresovatelná položka grafického zařízení při daném rozlišení, která má stejnou barvu,

Pixel je nejmenší obrazový bod při digitálním zpracování.

  1. Jak se pracuje s barvou v programech – jaký barevný model se používá a proč

Využívá se RGB modelu (tzv. součtový model barev), kde barvy jsou míchány ze tří složek (většinou po 8 bitech na složku), červené, zelené a modré. Výslednou barvu (typu TColor) lze získat voláním RGB.

 

  1. J Které komponenty mají k dispozici Canvas a můžeme na něj přímo kreslit?

Komponenty odvozené od TGraphicControl.

  1. Jaké nástroje nám dává Canvas kreslení

Nastavení pera a štětce, funkce oblouk(arc), elipsa(ellipse), obdélník (rectangle), úsečku (lineto), polygon a další.

Vlastnosti jsou Pen, Brush,font, Penfos: tpoint (aktuální pozice pera) Pixels, která vrací barevný kód pixelu na bodu danému souřadnicemi.

 

 

  1. Jak nakreslím kružnici na paintbox1 tak, aby byla v dané kreslící ploše maximální

paintbox1.canvas.ellipse(0,0, max(paintbox1.height, paintbox1.width)-1,

max(paintbox1.height, paintbox1.width)-1);

  1. Napište příkazy pro ohraničení obdélníkem klientské oblasti na Form1 tak, aby šířka čáry byla 3

           pixly a barva čáry byla modrá.

with form1.canvas do begin

pen.color:=clBlue;

pen.width:=3;

rectangle(0,0,form1.clientwidth-1,form1.clientheight-1);

end;

  1. Napište kód testovací procedury, která bude na canvas předaný jako parametr kreslit 10000 elips s maximální velikostí osy a = 120, b = 80. Elipsy generujte náhodně ale tak, aby se vždy vykreslila celá, vždy s jinou barvou obrysové čáry a výplně.

var loop,x,y:integer;

randomize;

for loop:=1 to 10000 do with canvas do begin

pen.color:= rgb(random(256),random(256),random(256));

brush.color:= rgb(random(256),random(256),random(256));

x:=random(120); y:=random(80);

ellipse(x,y,random(120-x),random(80-y));

end;

Tak tuhle úchylárnu sem teda neodzkoušel :-))

  1. Napište funkci, která canvas předávaný jako parametr „vymaže“ – za čistou pracovní plochu považujeme bílé plátno

with canvas do begin

brush.color:=clWhite;

fillrect(ClipRect);

end;

Tento příklad prakticky odzkoušen!

  1. Vyzkoušejte si použití TTreeView – jak přidám do struktury obrázkové ikony, jak mohu testovat vybraný text

Propojím Treeview s ImageListem a poté nastavím u příslušného řádku imageindex. Testuji přes Treeview.Selected;

  1. Co všechno ovlivňuje barvu kreslené čáry

Pen.Color a Pen.Mode.

  1. Která vlastnost pera určuje ROP, kterou Win provádí při vykreslování čáry a jaká je její implicitní hodnota

Pen.Mode, implicitně pmCopy.

  1. Porovnejte kreslení na Form, PaintBox a Image

Při kreslení na Form/Paintbox se obrázek neukládá do paměti a musí být překreslován v OnPaint události, zatímco Image má obrázek uložen v paměti a překresluje se v případě potřeby sám.

  1. Jak zajistit, aby se obraz u Paintboxu při vzniku neplatné oblasti neztratil

Vykreslovací algoritmus volat v OnPaint události.

  1. Které metody slouží k překreslení okna

Invalidate a Update, Repair, Refresh

  1. Porovnejte metody invalidate a update

Invalidate zařadí žádost o překreslení do fronty zpráv, zatímco Update způsobí, že žádosti o překreslení ve frontě zpráv jsou okamžitě zpracovány.

  1. Chceme-li okamžité překreslení, kterou metodu voláme

Pro okamžité překreslení volám Invalidate, protože její provedení je kratší.

Repaint.

  1. Jak lze zajistit, aby bylo vidět průběžné vykreslování u Image

Po každém kousku vykreslování volat application.ProcessMessages (nebo Repaint).

  1. Chci-li přehrát video okamžitě pomocí komponenty MediaPlayer, co musím nezbytně udělat

Nastavit MediaPlayer.Filename na jméno souboru videa, zavolat MediaPlayer.Open a MediaPlayer.Play.

Musim komponentu image nastavit jako display.

  1. Jak lze ošetřit výskyt chyb v aplikaci tak, aby se stala bezpečnější.

Použít výjimek, try …tělo programu… except blok.

 

 

  1. Porovnejte použití except a finally

Blok except se vyhodnocuje, došlo-li v bloku try k výjimce, zatímco finally se zpracovává při každém skončení try bloku (došlo-li k chybě či nikoli).

  1. Jak velký může být řetězec definovaný jako string

Krátký string: proměnná typu string[n] obasuje celkem n+1 bytů, a může obsahovat pouze 255 znaků

Dlouhý string: je čtyř bytový a může obsahovat 232 znaků.

Pascalovský string může mít max. 255 znaků.

  1. Jaká je implementace typu string a typu PChar

String je v podstatě array[0..255]of char, kde na pozici 0 je uložena aktuální délka řetězce jako byte. PChar je řetězec jazyka C, jde o posloupnost znaků ukončenou znakem s kódem 0, chybí zde indikátor délky řetězce. Délka je omezena pouze implementací v operačním systému, ve Win95 je to 2^15-1.

  1. Jak sloučíme dva řetězce typu PChar – první ať obsahuje slovo „dobrý“ a druhý slovo „den“

Použijeme funkci pro zřetězení(konkatenaci) StrCat. Musíme si však dát pozor na dostatečnou alokaci paměti pro výsledný řetězec.

 

  1. J Naprogramujte vše potřebné pro možnost kreslení obdélníka na Image1 tak, aby se jeho levý horní bod umístil na mousedown, na tah myší se pak měnila jeho velikost z výchozího bodu do aktuálního bodu určeného polohou myší, při ukončení „tažení“ myší – mouseup ať zůstane na kreslící ploše posledně překreslovaný obdélník.

V unitě definovat

var down:boolean=false;

x0,x1,y0,y1:integer;

 

do OnMouseDown image1:

down:=true;

x0:=x; x1:=x;

y0:=y; y1:=y;

 

do OnMouseMove image1:

if down then with image1.canvas do begin

pen.Mode:=pmNotXor;

Rectangle(x0,y0,x1,y1);

x1:=x;y1:=y;

pen.Mode:=pmCopy;

Rectangle(x0,y0,x1,y1);

end;

 

do OnMouseUp image1:

down:=false;

Tento příklad prakticky odzkoušen!

  1. Jaký je rozdíl v definici a použití class a record

Class může využívat polymorfismu (dědění), může obsahovat metody a properties. Paměť se proměnné přiděluje až po zavolání konstruktoru, zatímco u recordu se přiděluje ihned. Record nemůže využívat polymorfismu ani obsahovat properties a metody.

  1. Vysvětlete rozdíl v použití private a protected

Private položky jsou „vidět“ pouze v metodách třídy, ve které jsou zadefinovány, zatímco protected položky jsou přístupné i pro jakéhokoli potomka.

  1. Vysvětlete rozdíl v použití public a published

Published položky jsou přístupné již při designu aplikace (můžeme do nich přiřazovat hodnotu již při vytváření aplikace) zatímco do public položek lze ukládat hodnoty až v runtime.

  1. Jak se realizuje dědičnost u objektových tříd

V deklaraci třídy např. TMojeTrida=class(TPredek) zdědí TMojeTrida všechny atributy a metody třídy TPredek.

  1. Jaké vlastnosti mají statické metody

Jsou-li volány v potomkovi, volá se jejich implementace v základní třídě. Nemohou být „převálcovány“(override) v potomcích.

  1. Co platí o metodách dynamických a virtuálních

Dynamické a virtuální metody mohou být převálcovány v potomcích, jsou-li volány v potomcích, upřednostňují se převálcované implementace metod.

 

 

  1. Kdy definujeme abstraktní metodu

Když implementace této metody se předpokládá až v potomcích, v základní třídě pak není implementována a volána může být až v potomkovi, kde byla převálcována (override).

Abstraktní metody pouze avizují, že je budou potomci používat, u potomka implementován kód příslušného předka. Existuje v definici objektu, implementujeme ji až u potomka, nemá implementační kód.

  1. Co je metoda třídy – co to znamená pro její definici a pro její volání

Deklaruje se za použití slova class, např. class function GetInfo:string; jsou to metody, které operují s třídou, ne objektem jako její instancí. Lze k nim přistupovat jak pomocí třídy (např. TEdit.ClassName) tak přes ukazatel (Edit1.ClassName), není tedy pro jejich používání nutné vytvářet instanci třídy.

  1. Co jsou vlastnosti objektů definované jako property

Jsou to „inteligentní“ atributy, přes položky read a write lze reagovat na pokusy o jejich změnu či čtení.

  1. K čemu používáme TThread a jaké české slovo vystihuje tento pojem

TThread používáme pro vytvoření paralelně běžícího algoritmu, česky zvaného vlákno.

  1. Je Thread komponenta, když ne co to je

Ne, komponenta to není (jejím předchůdcem není TComponent, ale TObject). Je to pouze abstraktní třída zapouzdřující API a usnadňující vytváření a práci s vlákny pod Windows. Význam mají až instance potomků této třídy.

  1. Má každá aplikace TThread, když tak kolik threadů má

Každá aplikace má 1 hlavní vlákno (proces), …i když silně pochybuju, že je zrovna typu TThread :-)).

  1. Vytvořte instanci threadu a vysvětlete parametr metody instance

var thread:TThread;

thread:=TThread.Create(false);- parametr udávající, jestli se má vlákno spustit ihned po jeho vytvoření nebo až zavoláním metody Resume.

  1. Jak Thread spustíme, pozastavíme, jak si vynutíme pokračování jeho činnosti

Spustíme ho vytvořením instance (s parametrem false), pozastavíme – Suspend, pokračování – Resume.

  1. Která metoda Threadu bude obsahovat jeho kód

Override metody Execute ve třídě potomka.

  1. Které vlastnosti a metody je potřeba znát k rozumnému naprogramování Threadu

Hlavně metodu Synchronize, vlákno totiž může přistupovat ke sdíleným prostředkům současně s jinými vlákny či hlavním procesem, což způsobuje zásadní výjimky a hroutí program (ne-li systém). Dále metodu Terminate na ukončení provádění vlákna.

Metoda execute

Metoda Synchronize umožňuje provádět některé části z primárního threadu.

Definice: procedure synchronize(metod: TthreadMethod) TthreadMetod je procedurální metoda bez parametrů.

Protected

Procedure doterminate;

Procedure execute;

Procedure synchronize;

Public

Constructor create (createsuspend:bolean);

Destructor destroy;

Procedure resume;

Procedure suspend;

Procedure terminate;

  1. Může objekt obsahovat jiný objekt, na co musíme při programování takové objektové třídy myslet

Ano, ale v konstruktoru/za běhu vytvořené instance musíme v destruktoru uvolnit (voláním destruktoru těchto objektů).

  1. Které vlastnosti charakterizují OOProgramování v obecně zavedeném smyslu

Jsou to zapouzdření (uzavřenost, kompaktnost), dědičnost a polymorfismus.

  1. Budeme-li mluvit o plném OOProstředí, jaká je struktura objektu a jak by měl objekt komunikovat s vnějším prostředím

Struktura objektu – atributy a metody určené pro vnitřní použití by měly být deklarovány uvnitř klauzule private, metody a atributy pro komunikaci navenek by měly být public.

  1. Co je kruhová reference a jak ji lze řešit

V unitě 1(unit1) je v sekci interface napsáno uses unit2, v unitě 2 je pak uses unit1 napsáno až v implementation sekci. Je to potřeba např. když dvě třídy potřebují pracovat jedna s tou druhou navzájem.

 

 

 

  1. J Jak implementují WIN zprávu

Je to datová struktura typu TMsg (record), obsahuje všechny potřebné informace o události.

  1. Jak se zpracovává zprava po předání „aplikaci“

Nejdříve je zařazena do fronty, když na ni přijde řada, je zpracována ve WndProc (proceduře okna) okna, kterému byla poslána.

  1. Jak je definovaný základní – generický typ pro zprávy v Delphi

Jako předdefinovaný typ TMessage, pouze semantická konverze standardního windows typu.

  1. Chceme-li ošetřit vlastní metodou nějakou speciální událost, např. takovou která nemá implementované rozhraní pro zpracování události, která pravidla musíme dodržet

Můžeme definovat metodu s jedním var parametrem s direktivou message, např. procedure WMChar(var Message: TWMChar);message WM_CHAR;

a v ní napsat příslušný kód. Neměl by však být příliš časově náročný, jinak blokuje zpracování dalších zpráv.

  1. Jak můžeme zachytit zprávu a zabránit jejímu zpracování v aplikaci

Můžeme ji v application.OnMessage označit za zpracovanou (handled:=true) a tak zabránit jejímu zpracování.

  1. Vysvětlete metodu Perform, „kdo“ a jak ji získává

Metoda perform simuluje poslání zprávy Controlu, ve kterém je volána. Zpráva je však ihned zpracována, nezařazuje se do fronty.

  1. Jak mohu poslat zprávu jinému „okennímu“ prvku aplikace mám-li jeho handle

SendMessage a PostMessage.

funkce postmessage (pošle zprávu přímo proceduře okna a čeká až bude zpráva zpracována)  a sendmessage (pošle zprávu za fronty zpráv okna a vrátí se okamžitě).

  1. Co jsou notifikační zprávy, příklad

Jsou posílány Controlem rodičovskému oknu, je-li třeba, aby na nějakou událost u dítěte reagoval i rodič. Např. klik na Control.

Jsou to zprávy, které se posílají rodičovskému prvku, jestliže se v některém je podřízeném prvku stalo něco, co by rodiče mohlo zajímat. Tyto zprávy se vyskytují pouze ve standardních contorlos windows.  Př: vybrání textu posuv na posuvné liště…

  1. Čím se řídíme při stanovení předka nové komponenty

Abychom měli co nejméně práce s dodefinováváním metod a atributů (tzn. , aby předek měl co nejvíce společných rysů) a také co nejméně používali override metod.

  1. Jak zařídíme, aby v OI byly vidět jen ty vlastnosti, které jsme se sami rozhodli zveřejnit do OI

Jako předka použijeme třídu začínající slovem Custom, např. TCustomControl, u kterého jsou všechny properties uvedeny jinde než v published sekci (typicky protected). Stačí je pak u potomka přepsat do published sekce (stačí krátké definice, nemusíme přepisovat vše), čímž se zviditelní.

  1. Popište postup pro odvození nové komponenty TMyShape odvozené od TShape – v hlavních krocích takové, aby při jejím položení na formulář měla tvar elipsy se žlutou výplní a 2 pixly tmavomodrým obrysem

v interface sekci

type TMyShape = class(TShape)

public

constructor Create(AOwner:TComponent);override;

end;

 

v implementation sekci

constructor TMyShape.Create(AOwner: TComponent);

begin

inherited;

pen.color:=clNavy;

pen.Width:=2;

brush.Color:=clYellow;

shape:=stEllipse;

end;

Tento příklad prakticky odzkoušen!

  1. Jak umístím novou komponentu na stránku Samples

V menu component->new component mohu přímo specifikovat název palety, kam se daná komponenta uloží.

 

 

 

 

 

  1. Pro novou komponentu TMyShape nadefinujte vlastnost Barva tak, aby byla v době návrhu viditelná v OI a aby její nastavení způsobilo změnu barvy komponenty

v interface sekci

type TMyShape = class(TShape)

private

EBarva:TColor;

procedure NastavBarvu(barva:TColor);

published

property Barva:TColor read EColor write NastavBarvu;

end;

 

v implementation sekci

procedure TMyShape.NastavBarvu;

begin

EColor:=barva;

{brush.}Color:=EColor;

invalidate;

end;

  1. Novou komponentu TMyShape nadefinujte tak, aby po jejím položení na formulář měla tvar žluté elipsy s modrým a 2 pixly širokým okrajem.

Zdá se, že na stejnou otázku jako je číslo 11, je kupodivu i stejná odpověd :-))

  1. Jak přidám ke komponentě ikonu – které podmínky musím dodržet – velikost, počet barev, názvy

Do balíčku s unitou komponenty přidám *.dcr soubor se stejným názvem jako komponenta, musí mít 24*24 pixelů, 16 barev.

V hlavní menu volím Tools a v rozbaleném menu volím imageeditor a následně pak file a new a dále component resourse file. Icona musí být bitmapa a její rozměry jsou 24*24 pixelů, pouze 16 barev, utvoří se soubor s koncovkou *.drc.  Tuto ikonu musím uložit do stejného adresářem jako je uložená moje komponenta, pojmenování souboru musí být stejně jako unita.

  1. Jaké typy interních zpráv pro komponenty poskytuje VCL a jak je můžeme v komponentě zachytit a reagovat na ně – uveďte příklad

Component message, typicky CM_…., component notification, typicky CN_…., lze je zachytávat metodou s direktivou message CN/CM_…. a jedním var parametrem,

např. procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;

 

  1. J Co vidím v OI odvozuji-li komponentu od TcustomControl

Nemělo by tam být nic.

  1. Jak dostanu událost nebo property do OI

Deklaruji ji (znovu – stačí jen jméno, nemusím vše zadávat znovu) v rámci klauzule published.

Nejprve musím proceduru deklarovat :

Procedure tpc.click ;

Begin

Inherited;

Tělo procedury

End;

A tuto vlastnost uvidím v OI až po uveřejnění v sekci published.

  1. Co jsou property

Inteligentní atributy, s jejich čtením či zápisem lze spojit určitý kód (na rozdíl od standardních atributů), lze je také editovat v object inspectoru již při designu. Též události spojené s komponentou (např. OnClick) jsou deklarovány též jako property.

Property jsou inteligentní data, možnost zobrazit je v OI, jedná se o zapouzdřený přístup ke komponentám. Property jsou také události odvozené od standardních událostí. Představuje rozhraní k interním polím komponenty.

  1. Jak definuji property,  budou vždy vidět v OI

Definuji ji ve třídě s identifikátorem „property“, např. property Color:TColor read CtiBarvu write NastavBarvu; V OI bude vidět pouze, pokud budou deklarovány v klauzuli published.

  1. Proč se používá mechanizmus přístupu k vnitřním proměnným pomocí vlastností

Lze lehce reagovat na pokusy o čtení či zápis takovýchto atributů (což u běžných public atributů nelze), lze jejich hodnoty lehce inicializovat v OI. Lépe se jejich používáním hlídá zapouzdření objektů (tříd).

 

 

  1. Co přináší svým potomkům TObject, TPersistent a Tcomponent

TObject – má základní metody třídy (např. ClassName, InheritsFrom, konstruktor, destruktor, Free a jiné), celou řadu virtuálních metod (pro pozdější override) a nemá žádné atributy.

TPersistent – navíc má metody přiřazování (Assign) a dovoluje přiřazovat hodnoty do properties.

TComponent – je předkem všech komponent VCL, jeho potomci mohou být dáni na paletu komponent, může s nimi být manipulováno při designu formuláře, dále mohou vlastnit a spravovat další komponenty a lze je převést na ActiveX a COM objekty.

  1. Vytvořte aplikaci, ve které bude několik různých vizuálních komponent. Při kliknutí na kteroukoli z nich ať se do listboxu vypíše „rodokmen“ – seznam předků.

Do události OnClick daných komponent:

var obj:TClass;

begin

obj:=sender.ClassType;

listbox1.clear;

repeat

listbox1.Items.append(obj.ClassName);

obj:=obj.ClassParent;

until obj=nil;

end;

Tento příklad prakticky odzkoušen!

  1. Naprogramujte „hrací kostku“ jako komponentu

v interface sekci

type

TKostka = class(TImage)

private

{ Private declarations }

ECislo:byte;

procedure NastavCislo(cislo:byte);

procedure NakresliCislo;  //překresluje číslo na obrazovce

protected

{ Protected declarations }

public

{ Public declarations }

constructor Create(AOwner:TComponent);override;

published

{ Published declarations }

property Cislo:byte read ECislo write NastavCislo;

end;

 

v implementation sekci

 

constructor TKostka.Create(AOwner: TComponent);

begin

inherited;

NakresliCislo;

end;

procedure TKostka.NakresliCislo;

begin

//mazání předešlého čísla

canvas.brush.color:=clWhite;

canvas.FillRect(canvas.ClipRect);

case ECislo of

1:with canvas do begin

brush.color:=clBlack;

//zde bych pomocí funkce ellipse kreslil body v závislosti na výšce a šířce komponenty

end;

2: atd… podle hodnoty ECislo bych kreslil jednotlivé konfigurace bodů

end;

end;

 

procedure TKostka.NastavCislo(cislo: byte);

begin

if cislo>6 then cislo:=6 else

if cislo<1 then cislo:=1;

ECislo:=cislo;

NakresliCislo;

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SHARE IT:

Leave a Reply