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
- 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
- Jaká vlastnost uvede časovač do chodu
Enable
- 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
- 43. Jaké funkce dovolují pracovat s datumem a časem
Date a Time :TDateTime
DatetoStr,TimeToStr
- 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
- 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
- Které vlastnosti vytvoří dojem 3D Panelu
BevelInner, BevelOuter, BevelWidth, BorderWidth, BorderStyle
- K čemu slouží komponenta Splitter
K rozdělení plochy formulaře a možnosti dynamicky měnit velikost za běhu
- Které komponenty mohu použít pro přímý vstup číselných dat
SpinEdit,UpDown +Edit,MaskEdit
- 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
- Jakou komponentu lze použít pro práci s víceřádkovým textem
Memo a RichEdit
- Která vlastnost této komponenty obsahuje text a jakého je typu
Lines:TString (Pole stringů indexované od nuly)
- 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
- Jakou metodou komponenty OpenDialog a Save Dialog lze tento aktivovat
Execute
- 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.
- 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
- Jak lze totéž udělat v ComboBoxu
Prakticky stejným způsobem přidáním do Items je to stejný datový typ
- Lze zjistit počet řádek v Memo nebo RichEditu
Ano vlastnost Memo.Lines.Count
- Jak lze vyprázdnit jakýkoli seznam nebo víceřádkový text – memo
Voláním metody Clear
- 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
- 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
- Kdo může být Parent
Object typu TWinControl
- Jaký je rozdíl mezi metodami Free a Destroy
Free kontroluje existenci instance objektu destroy nikoli
- 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ý
- Které vlastnosti umožňují vytvoření plovoucí nápovědy
Hint – zde zadám text nápovědy, showhint – provede vizualizaci nápovědy
- 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(..)
- Jakou metodou okno „zviditelníme„ a předáme mu „Focus„
Form2.Show nebo .ShowModal
- 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.
- 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.
- 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(..)
- 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.
- 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
- 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);
- Která vlastnost dovoluje definovat plovoucí nápovědu a která rozhoduje o jejím zobrazení
Hint,ShowHint
- 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
- Jaký význam má parametr SENDER
Sender je odesilatel pro všechny definice až na událost OnDragDrop kde je příjemcem.
- 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“
- 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
- 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);
- 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;
- 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
- Kdy využíváme TimageList
Když chceme používat ikony, obrazky na komponenty
- 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
- Jak vytvoříme v ToolBaru skupinu tlačítek, které pracují s vlastností, které se navzájem vylučují
Nastavením vlastnosti gruped na True.
- Jak vytvoříme v ToolBaru skupinu tlačítek, které pracují s vlastnostmi, které mají aditivní charakter
Nastavením vlatnosti tlačítka Style na tbsCheck
- 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
- 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
- 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’
- Které vlastnosti nápovědy lze řídit globálně a jak
Pomocí funkcí Aplication.Hind, HindPause, HindColor
- Které předdefinované informační okna máme k dispozici
ShowMessage, MesageDlg, MesageBox,MesageDlgPos
- 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
- Na které události lze reagovat stejnou metodou – procedurou pro obsluhu události
Udalost musí mit stejnou hlavičku metody.
- 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
- Jak předám řízení i-tému controls, když je tento je i-tým prvkem pole controls
Controls[i].
- 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
- 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
- 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
- Definujte metodu Drag&Drop
Uchop a opusť slouží k předávaní vlastností dvou komponent
- Které vlastnosti určují metodu Drag&Drop
DragMode, DragKursor, DragKind
- Které události pro naprogramování metody Drag&Drop lze použít
OnDragDrop, OnEndDrag, OnDragOver,OnStartDrag
- Co znamená v parametrech události spojených s Drag&Drop Target a Source–
Target=cíl, Source=zdroj
- 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)
- 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
- 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
- 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
- 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;
- Co je to dockování
Ukotvovaní, lze ukotvit komponentu i mimo plochu formulaře.
- 110. Jak lze pohybovat v aplikaci komponentou
Nastavím property
DragMode:= dmAutomatic;
DragKind:=Dmdock;
- 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
- 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.)
- Co znamená přetěžování funkcí-
definování funkce vícekrát
- 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ů
- 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čů
- 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í
- 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
- 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;
- Jak zjistím všechny dostupné diskové jednotky v počítači, kde běží aplikace
Přes komponentu DriveComboBox a vlastnost Items.
- 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.
- 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.
- 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.
- 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).
- 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)
- Čí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.)
- Jaká funkce TCanvas zkopíruje obdélník jedné bitmapy do druhé bitmapy
Canvas.CopyRect.
- 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ů.
- 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‘);
- 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;
- 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!
- 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.
- 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.
- 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í.
- 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.
- J Které komponenty mají k dispozici Canvas a můžeme na něj přímo kreslit?
Komponenty odvozené od TGraphicControl.
- 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.
- 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);
- 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;
- 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 :-))
- 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!
- 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;
- Co všechno ovlivňuje barvu kreslené čáry
Pen.Color a Pen.Mode.
- 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.
- 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.
- Jak zajistit, aby se obraz u Paintboxu při vzniku neplatné oblasti neztratil
Vykreslovací algoritmus volat v OnPaint události.
- Které metody slouží k překreslení okna
Invalidate a Update, Repair, Refresh
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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ů.
- 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.
- 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.
- 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!
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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í.
- 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.
- 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.
- 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 :-)).
- 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.
- 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.
- Která metoda Threadu bude obsahovat jeho kód
Override metody Execute ve třídě potomka.
- 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;
- 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ů).
- Které vlastnosti charakterizují OOProgramování v obecně zavedeném smyslu
Jsou to zapouzdření (uzavřenost, kompaktnost), dědičnost a polymorfismus.
- 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.
- 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.
- J Jak implementují WIN zprávu
Je to datová struktura typu TMsg (record), obsahuje všechny potřebné informace o události.
- 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.
- Jak je definovaný základní – generický typ pro zprávy v Delphi
Jako předdefinovaný typ TMessage, pouze semantická konverze standardního windows typu.
- 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.
- 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í.
- 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.
- 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ě).
- 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ě…
- Čí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.
- 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í.
- 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!
- 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ží.
- 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;
- 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 :-))
- 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.
- 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;
- J Co vidím v OI odvozuji-li komponentu od TcustomControl
Nemělo by tam být nic.
- 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.
- 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.
- 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.
- 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).
- 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.
- 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!
- 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;
Nějaké ty komentáře