Frames/fi: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | - | ||
| 2 | - | ||
| 3 | - | ||
| 4 | - | ||
| 5 | - | ||
| 6 | - | ||
| 7 | - | ||
| 8 | - | ||
| 9 | - | ||
| 10 | - | ||
| 11 | - | ||
| 12 | - | ||
| 1 | + | **[[TFrame]]** eli kehys on säiliö komponenteille ja hyvin samankaltainen kuin [[TForm|lomake]]. Niiden ainutlaatuinen kyky on, että ne voidaan upottaa lomakkeelle tai toisiin kehyksiin (TFrame). Lomake tallennetaan kahteen tiedostoon: koodi tallennetaan .pas-tiedostoon ja muotoilu .lfm-tiedostoon. | |
| 13 | 2 | ||
| 14 | 3 | ## Miten luodaan kehys eli frame? | |
| 15 | 4 | ||
| 16 | - | ||
| 5 | + | Valitse tiedosto-valikosta: Tiedosto -\> Uusi... valikon kohta ja avautuvassa valintaikkunassa valitse "Frame". | |
| 17 | 6 | ||
| 18 | - | ||
| 7 | + |  | |
| 19 | 8 | ||
| 20 | 9 | ## Miten sijoitat kehyksen lomakkeelle tai toiseen kehykseen? | |
| 21 | 10 | ||
| 22 | - | ||
| 11 | + | [[Component Palette/fi|Komponenttipaletin]] [[[[Standard tab/fi|Standard-välilehdellä]] on erityinen [[TFrame]]-komponentti. | |
| 23 | 12 | ||
| 24 | - | ||
| 13 | + | Kun se pudotetaan lomakkeelle tai toiseen kehykseen, IDE pyytää valitsemaan jonkin kehyksen. Paketeissa olevia kehyksiä ei ole vielä toteutettu. Mutta voidaan luoda kehyksiä koodilla jopa paketeissa. Ei voi luoda kehyksiin ristikkäisiä viittauksia - IDE kieltää tämän, koska ei voida asettaa FrameA: ta FrameA: ksi, eikä FrameA: ta voi rakentaa FrameA: ksi. | |
| 25 | 14 | ||
| 26 | - | ||
| 27 | - | ||
| 15 | + |  | |
| 28 | 16 | ||
| 29 | 17 | ## Mihin niitä voidaan käyttää? | |
| 30 | 18 | ||
| 31 | - | ||
| 19 | + | Ne ovat tarpeen, kun on joukko komponentteja, joita halutaan käyttää useissa lomakkeissa. Ryhmän välillä pitäisi olla sama ohjaus ja logiikka sovelluksen eri ikkunoissa (lomakkeissa). Voidaan ryhmitellä toistetut ohjaukset ja logiikat yhteen kehykseen ja käyttää kyseistä kehystä eri paikoissa. Siksi ei tarvitse toistaa ohjauksen työtä asettelemalla ja kirjoittamalla logiikkaa. | |
| 32 | 20 | ||
| 33 | - | ||
| 34 | - | ||
| 21 | + | Voidaan esimerkiksi haluta siirtää kohteita kahden luetteloruudun (listbox) välillä painikkeilla. Joten voidaan luoda kehys kahdella listboxilla ja tarvittavilla painikkeilla, kirjoittaa logiikkaa liikkuvien kohteiden kohdalle ja käyttää sitten kehystä kaikissa lomakkeissa tarpeen mukaan. Lisäksi, jos havaitaan virhe kehyskoodissa niin voidaan korjata se kerralla kehyksen koodissa sen sijaan, että se korjattaisiin n-kertaa kaikissa sitä käyttävissä lomakkeissa. | |
| 35 | 22 | ||
| 36 | - | ||
| 23 | + | Suunniteltu kehys: | |
| 37 | 24 | ||
| 38 | - | ||
| 25 | + |  | |
| 39 | 26 | ||
| 40 | - | ||
| 41 | - | ||
| 27 | + | Kyseinen kehys sijoiteltu lomakkeelle: | |
| 42 | 28 | ||
| 43 | - | ||
| 29 | + |  | |
| 44 | 30 | ||
| 45 | - | ||
| 31 | + | Sama kehys sijoitettu toiselle lomakkeelle: | |
| 46 | 32 | ||
| 47 | - | ||
| 33 | + |  | |
| 48 | 34 | ||
| 49 | 35 | ## Yksityisten muuttujien alustus | |
| 50 | 36 | ||
| 51 | - | ||
| 52 | - | ||
| 37 | + | TFrameilla ei ole OnCreate- tai OnDestroy-tapahtumia, joiden avulla yksityisiä muuttujia voidaan alustaa ja vapauttaa. Voidaan ylikirjoittaa ([[Override]]) oletusrakentaja ja -tuhoaja tekemään tämän. | |
| 38 | + | ||
| 39 | + | ``` pascal | |
| 53 | 40 | TFrame1 = class(TFrame) | |
| 54 | - | ||
| 55 | - | ||
| 56 | - | ||
| 57 | - | ||
| 58 | - | ||
| 59 | - | ||
| 60 | - | ||
| 61 | - | ||
| 62 | - | ||
| 63 | - | ||
| 64 | - | ||
| 65 | - | ||
| 66 | - | ||
| 67 | - | ||
| 68 | - | ||
| 69 | - | ||
| 70 | - | ||
| 71 | - | ||
| 41 | + | private | |
| 42 | + | MyObj: TObject; | |
| 43 | + | public | |
| 44 | + | constructor Create(TheOwner: TComponent); override; | |
| 45 | + | destructor Destroy; override; | |
| 46 | + | end; | |
| 47 | + | ||
| 48 | + | constructor TFrame1.Create(TheOwner: TComponent); | |
| 49 | + | begin | |
| 50 | + | inherited Create(TheOwner); | |
| 51 | + | MyObj := TObject.Create; | |
| 52 | + | end; | |
| 53 | + | ||
| 54 | + | destructor TFrame1.Destroy; | |
| 55 | + | begin | |
| 56 | + | MyObj.Free | |
| 57 | + | inherited Destroy; | |
| 58 | + | end; | |
| 72 | 59 | ``` | |
| 73 | 60 | ||
| 74 | 61 | ## Näyte dynaamisesta luomisesta | |
| 75 | 62 | ||
| 76 | - | ||
| 77 | - | ||
| 63 | + | Koska komponenttipaletin TFrame-komponenttia ei tarvita niin se on aika helppoa. Voidaan myös tehdä sivunmuutostyyppisovelluksen (kuten älypuhelinsovellus) tallennusresursseilla | |
| 64 | + | ||
| 65 | + | ``` pascal | |
| 78 | 66 | unit Unit1; | |
| 79 | - | ||
| 80 | - | ||
| 81 | - | ||
| 82 | - | ||
| 83 | - | ||
| 84 | - | ||
| 85 | - | ||
| 86 | - | ||
| 87 | - | ||
| 88 | - | ||
| 89 | - | ||
| 90 | - | ||
| 91 | - | ||
| 92 | - | ||
| 93 | - | ||
| 94 | - | ||
| 95 | - | ||
| 96 | - | ||
| 97 | - | ||
| 98 | - | ||
| 99 | - | ||
| 100 | - | ||
| 101 | - | ||
| 102 | - | ||
| 103 | - | ||
| 104 | - | ||
| 105 | - | ||
| 106 | - | ||
| 107 | - | ||
| 108 | - | ||
| 109 | - | ||
| 110 | - | ||
| 111 | - | ||
| 112 | - | ||
| 113 | - | ||
| 114 | - | ||
| 115 | - | ||
| 116 | - | ||
| 117 | - | ||
| 118 | - | ||
| 119 | - | ||
| 120 | - | ||
| 121 | - | ||
| 122 | - | ||
| 123 | - | ||
| 124 | - | ||
| 125 | - | ||
| 126 | - | ||
| 127 | - | ||
| 128 | - | ||
| 129 | - | ||
| 130 | - | ||
| 131 | - | ||
| 132 | - | ||
| 133 | - | ||
| 134 | - | ||
| 135 | - | ||
| 136 | - | ||
| 137 | - | ||
| 138 | - | ||
| 139 | - | ||
| 67 | + | ||
| 68 | + | {$mode objfpc}{$H+} | |
| 69 | + | ||
| 70 | + | interface | |
| 71 | + | ||
| 72 | + | uses | |
| 73 | + | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; | |
| 74 | + | ||
| 75 | + | type | |
| 76 | + | ||
| 77 | + | { TForm1 } | |
| 78 | + | ||
| 79 | + | TForm1 = class(TForm) | |
| 80 | + | Button1: TButton; | |
| 81 | + | GroupBox1: TGroupBox; | |
| 82 | + | procedure Button1Click(Sender: TObject); | |
| 83 | + | procedure FormCreate(Sender: TObject); | |
| 84 | + | private | |
| 85 | + | { private declarations } | |
| 86 | + | Frame: TFrame; | |
| 87 | + | public | |
| 88 | + | { public declarations } | |
| 89 | + | end; | |
| 90 | + | ||
| 91 | + | var | |
| 92 | + | Form1: TForm1; | |
| 93 | + | ||
| 94 | + | implementation | |
| 95 | + | uses | |
| 96 | + | Unit2{TFrame1}, Unit3{TFrame2}, Unit4{TFrame3}; | |
| 97 | + | ||
| 98 | + | {$R *.lfm} | |
| 99 | + | ||
| 100 | + | { TForm1 } | |
| 101 | + | ||
| 102 | + | procedure TForm1.FormCreate(Sender: TObject); | |
| 103 | + | begin | |
| 104 | + | Frame := TFrame1.Create(GroupBox1); | |
| 105 | + | Frame.Parent := GroupBox1; | |
| 106 | + | end; | |
| 107 | + | ||
| 108 | + | procedure TForm1.Button1Click(Sender: TObject); | |
| 109 | + | begin | |
| 110 | + | if not Assigned(Frame) then | |
| 111 | + | begin | |
| 112 | + | Frame := TFrame1.Create(GroupBox1); | |
| 113 | + | Frame.Parent := GroupBox1; | |
| 114 | + | end else if Frame is TFrame1 then begin | |
| 115 | + | Frame.Free; | |
| 116 | + | Frame := TFrame2.Create(GroupBox1); | |
| 117 | + | Frame.Parent := GroupBox1; | |
| 118 | + | end else if Frame is TFrame2 then begin | |
| 119 | + | Frame.Free; | |
| 120 | + | Frame := TFrame3.Create(GroupBox1); | |
| 121 | + | Frame.Parent := GroupBox1; | |
| 122 | + | end else begin | |
| 123 | + | FreeAndNil(Frame); | |
| 124 | + | end; | |
| 125 | + | end; | |
| 126 | + | ||
| 127 | + | end. | |
| 140 | 128 | ``` | |
| 141 | 129 | ||
| 142 | 130 | ## Katso myös | |
| 143 | 131 | ||
| 144 | - | ||
| 132 | + | - [[TFrame]] | |
| 145 | 133 | ||
| 146 | 134 | --- | |
| 147 | - | ||
| 135 | + | *From the Free Pascal wiki, page "Frames/fi", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
