Delphi - ako zabrániť TMemo.SetFocus spusteniu?
Mám na formulári TMemo. Je to jediná komponenta, ktorá môže mať focus a ja potrebujem tomu zabrániť, aby sa tam dostal kurzor. Už som nastavil vlastnosť ReadOnly na False, aj TabStop na False, ale myšou sa tam dostanem. Nie je problém v metóde OnEnter nastaviť focus na niečo iné, ale nemám na čo. Ako tomu focusu myšou zabrániť?
V prvom rade nastav ReadOnly na True !! nie na False !!!
Tu je jednoduché riešenie:
Na Formulár daj TPanel do neho vlož Tmemo, TPanel.Enabled := False;
To je v háji. Bolo tu riešenie a ty si ho vymazal. ReadOnly mám na True, to je v poriadku a všetko musí byť Enabled na True, lebo mi to tlačiareň nevytlačí. Daj to tam späť! Nemal som čas to odskúšať, lebo som musel ísť preč.
Edit: Keď sa editne príspevok, tak nech sa to napíše do titulku priamo enginom poradne.
Sorry za to vymazanie ... Ale to bolo riešenie, aby user nemohol označiť text ani
myšou ani pomocou klávesnice. Myšou sa dalo do mema kliknúť a aj kurzor bolo vidieť ...
Aha, tak dobre, ale nebudúce stačí dopísať toto:
Dalo by sa to i takto
Predpokladam ze chces nieco ako Label ale s viac riadkami?
Beťár.
Ty si vtipalek aby tu mys honil okolo.
A preco by sa tam nemohol dostat kurzor? Ak nastavis ReadOnly tak sa tam neda nic vpisat, nie?
Focus moze mat cokolvek, trebars aj obycajny text (ak je ako komponenta dialogu, teda ak sa nemylim ), daj si tam prazdny text a drbni focus nanho ked mas nejaky problem s focusom, ale skor mas problem s volbou spravnych komponent na formular ked tak bastlis...
Ja som pako. Teraz ma napadlo riešenie. Napíšem neskôr. Označujem za vyriešené, hoci problém vyriešený nie je, ale to čo potrebujem to vyrieši.
Takže ide o to, že v tom formulári, kde nechcem, aby sa dostal kurzor, tak tam dám Enabled na False a hotovo, ale také isté TMemo mám na formulári, ktorý sa bude tlačiť a tam nechám Enabled na False a keďže sa formulár nikdy nezobrazí, tak ma to vôbec nemusí trápiť, či umožní focus alebo nie. Ešte otázočka: Dá sa pri Enabled na False zmeniť tá šedá farba na čiernu?
Skúsil si moje riešenie pomocou TPanel ? Vtedy nemáš text v TMemo zašednutý ...
Najem sa a hneď to skúsim.
Ozaj, ale keď som už túto otázku dal, tak by ma zaujímalo, kde je Jan Fiala. Ten vie v Delphi aj nemožné, tak by ma zaujímalo, ako by ten focus znemožnil on.
Inac ja ked robim nieco (vo VC++ cez MFC WinAPI) kde je vystup v textboxe tak ho len nastavim ako read only, focus dam defaultne na nieco ine (na nejaky button "OK" apod.), ale nesnazim sa zabranit pouzivatelovi kliknut tam mysou a oznacit kus textu - z jednoucheho dovodu - aby si pouzivatel ten text mohol potom vykopirovat cez copy-paste kam chce.
To je u teba tak nutne aby to neslo skopirovat?
Farba pozadia sa nastavit da (len je to cez extra message co Win posiela, ale predpokladam ze to v tej Delphi komponente bude urobene, vid help k nej, ak k tomu nic lepsie nenapise JaFi). //Edit: sorry, ty sa pytas na farbu pozadia ak to je Disabled, tak to zhlavy neviem, da sa zmenit ak je Enabled a len ReadOnly, ak je Disabled neviem ci sa da.
Vidíš, máš pravdu. Veď text sa zmeniť nedá a kurzor tam na začiatku nebude, tak to teda nemusím riešiť. Nechám ReadOnly na True a TabStop na False, to stačí.
Vlastne ide o to, že program sa dá urobiť perfektne, ale potom mu môžu chýbať určité veci. Napr. vo Winamp sa dá tiež po zobrazení informácií o MP3 vojsť do poľa s názvom súboru a označiť ho. Tak isto to ani v tomto programe nemusí byť chybou, ale prínosom. To ma ani nenapadlo.
Jestli se do toho nemá dát vlézt v žádném případě, tak:
1) TabStop := false; toho memo.
2) Přes TMemo natáhni TShape, barvy přispůsob aby to nebylo vidět, případně ještě pošli TShape do popředí.
3) Enjoy.