» Poradna » Programy

Delphi - jak zruším prvek, na který kliknu ?

 |   | 

1. Třeba button (ale ne nutně jen button) vytvořený programově a chci, aby po kliknutí na něj nejen zmizel (to by šlo přes parent := nil), ale aby přestal existovat.Chápu, že nejde v OnClick udělat Free, ale jak to poslat jeho nadřízenému, aby až ten OnClick doběhne, že ho má zrušit ?
2. Vytvořím programově zase třeba button. A chci mu nastavit reakci na kliknutí OnClick := MyClick - takto to překladač vezme, ale když mu chci vnutit totéž přes OnClick := TMyButton.MyClick, řve to neshoda TNotifyEvent x Procedure.
3. prosil bych vysvětlit jak je to s tím Paint v TImage můj dotaz též zde v sekci Programování.
Mám dovolenou, děti pryč, učím se Delphi a tohle by mi pomohlo.

Odpovědi na otázku

 |   | 

1) posli si vlastni zpravu, ve ktere ten prvek zrusis a zavolej ji pres PostMessage2) rve, protoze mu vnicujes udalost z nejake tridy. Vynechej to pismenko "T" a zkus jen OnClick := MyButton1.MyClickAle unika mi smysl...3) udalost Paint se vola v okamziku, kdy system potrebuje prekreslit okno. Muzes ji zavolat i rucne (RePaint, Refresh, Update, Invalidate), ale nemuzes primo v metode paint volat prekresleni. To by doslo k zacykleni. V Paint se dela jen kresleni, nic jineho

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Díky za rychlou odpověď
1. tak daleko ještě nejsem
2. ale přece to MyClick je procedura jako jako každá jiná
3. v tom Paintu chci nejdříve nechat proběhnout kód předka (inherited) a pak ho třeba orámovat a při tom výkonném příkazu pro to orámování (teď si nevzpomínám) se (asi) hned zase zavolá ten Paint. Zajímavé je, že ani po delší době nedojde pamět (asi by měla, ne ?) a úloha (pochopitelně) vytíží systém naplno.
4. nově mě napadlo - jde nějak zrušit v D6P v helpu ty CLX verze nápovědy ? Opravdu mě to nezajímá, jen to zdržuje, když musím vybírat VCL / CLX.
jdu domů, budu číst až zítra večer, předem díky.
ow

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

2. Ano, je to procedura jako kazda jina. Jenze problem je ten. ze se tam snazis priradit proceduru z tridy - TButton.MyClick. Trida fyzicky neexistuje, je to jen vzor, podle ktereho se vytvori konkretni objekt, treba Button14. jde. Je treba z linkovacich souboru napovedy vyhodit vsechny odkazy na CLX a nezapomen zrusit GID soubory (jsou skryte). Jde o soubory D7.OH*

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

1. Dobře, příště budeš dál2. Viz JF.3. Musíš orámování nakreslit přes nějaký Canvas, případně rovnejma nohama API funkcí DrawFrameControl - použití viz Win32SDK help, přibalen k Delphi.4. Také mžeš upravit systém nápovědy přes Delphi nabídka Help--Customize...Rada na závěr. Nenechávej prvky mizet a objevovat, nesmírně to mate uživatele. Používej Tvůj-prvek.Enabled := true/false, tedy jen zpřístupnění/znepřístupnění. Když něco uživateli z formu zmizí, má pocit, že něco někde nefunguje. Když je prvek jen nedostupný, je mu jasné, že za daných okolností nejde použít.PS: Prvek nezničíš Prvek.free - form až skončí, bude na hubě. Musíš použít Form.RemoveControl (Prvek). Přidání prvku opačně Form.InsertControl (Prvek). Ale jak říkám, takové zjevování a mizení jen uživatele těžce zmate.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

1. v helpu jsem k PostMessgae našel cosi k poště - to asi není ono.
2. OK
3. kreslil jsem to na Canvas a to kreslení jsem umístil do přepsané (vlastní - override) metody Paint. Nejdřív jsem v ní zavolal inherited a potom chtěl kreslit ještě na Canvas a ono se to chová divně.
4. Dík za tipy, musím to doma vyzkoušet.
Vysvětlení k tomu mizení - celé to souvisí s mým učením Delphi. Někde jsem na internetu objevil hlavolamy Faust a Osel napsané ve VB a dal jsem si za cíl napsat obecnější verzi, v které půjde nadefinovat si vlastní tvar kamenů - kliknu v Panelu na místo X,Y - objeví se mi tam dlaždice (elementární prvek kamenu) / nechci ho - kliknu na dlaždici a ona zmizí.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

K bodu 4)Zapomen na bytvareni tlacitek apod. To se k tomu vubec nehodi. K tomu se da velmi dobre vyuzit treba TStringGrid, kde si v bunce budes uchovavat hodnotu pole a uzivatelskym vykreslovanim budes kreslit kameny, jake potrebujes (OwnerDraw)Muzes pouzit primo i TDrawGrid, ale v tom pripade budes muset bokem uchovavat hodnoty poli.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Prvek, Button, Neshoda


Určitě si přečtěte

Výkon herního počítače za 139 Kč nebo i úplně zadarmo. Geforce Now startuje!

Výkon herního počítače za 139 Kč nebo i úplně zadarmo. Geforce Now startuje!

** Dlouhý betatest končí a nyní všichni mohou hrát přes internet ** Nemusíte žádné hry kupovat znovu. Jede to, co už máte v knihovnách na Steamu, Uplay, Battle.net a jinde ** Roční náklady odpovídají ceně jedné běžné hry

Tomáš Holčík | 53

Dost bylo moderních Windows 10. Pojďme je přebarvit zpět na Windows 95

Dost bylo moderních Windows 10. Pojďme je přebarvit zpět na Windows 95

** Stařičké Windows 2000 nedávno oslavily 20 let ** Někteří z vás si postěžovali, že to byly poslední hezké Windows ** Fajn, ukážeme vám, jak přebarvit Desítky o 25 let zpět

Jakub Čížek | 44

Srovnali jsme česká města s IBM, Googlem nebo třeba Samsungem. Podívejte se, v jaké firmě „žijete“

Srovnali jsme česká města s IBM, Googlem nebo třeba Samsungem. Podívejte se, v jaké firmě „žijete“

** Nadnárodní korporace zaměstnávají stovky tisíc lidí ** Mají tedy velikost metropolí ** Srovnali jsme je s českými krajskými městy

Jakub Čížek | 15



Aktuální číslo časopisu Computer

Velký test autokamer

Test ATX skříní

Jak surfovat pohodlně

Sportovní aplikace

Jak funguje procesor