[ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18 | 18

Zdravím vás.

Predstavme si aplikáciu, v ktorej máme veľmi veľa TEditov. V aplikácii sa nachádza aj TPopupMenu, ktoré obsahuje položky:

Kód:
Kopírovať
Vystrihnúť
Vložiť
Vymazať
Označiť všetko


V prípade, že by sa jednalo o jeden editbox, tak by som to bežne nalinkoval a do udalosti onClick na jednotlivé položky to riešil cez kód:

Kód:
Edit1.CopyToClipboard;
Edit1.CutToClipboard;
Edit1.PasteFromClipboard;
Edit1.ClearSelection;
Edit1.SelectAll;


Lenže v tomto prípade nemôžem napísať Edit1, zrejme tam musí byť niečo ako "odosielateľ". Treba teda spraviť tieto dve základné veci:

1. Priradiť hromadne všetkým komponenentám typu TEdit vybrané popupmenu.
2. Ošetriť udalosti onClick položiek popup menu tak, aby fungovalo kopírovanie, vkladanie atď presne pre ten edit, v ktorom bolo popup menu vyvolané.

Napadá niekoho niečo?


Offline

Skúsený užívateľ
Skúsený užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 11.01.09
Prihlásený: 26.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova

1.) niekde v kóde napíš:
Kód:
for i := 0 to (Form1.ComponentCount-1) do
  if (Form1.Components[i] is TEdit) then (Form1.Components[i] as TEdit).PopupMenu := PopupMenu1;


2.) v tele jednotlivých funkcií pre PopupMenu:
Kód:
(PopupMenu1.PopupComponent as TEdit).CopyToClipboard;      // tak isto pre ostatne zlozky PopUp menu


Offline

Užívateľ
Užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18 | 18

Kód sa skompiluje, ale v momente, keď nastane udalosť kliknutia na položku z popup menu, ohlási program chybu "Invalid type cast.".

Keď však napíšem:
Kód:
if PopupMenu1.PopupComponent = Editbox1 then
  Editbox1.CopyToClipboard;


... tak to ide všetko správne (ale samozrejme, vypisovať tam všetky používané Editboxy je nepraktické, nakoľko ich mám v projekte dosť).


Offline

Skúsený užívateľ
Skúsený užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 11.01.09
Prihlásený: 26.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova

Komponent Editbox1 je v tvojom projekte TEdit? Alebo iný komponent (prípadne odvodený)? Lebo mne to funguje korektne a takisto som to skúsil na x prvkoch TEdit.

// napíš sem, čo vypíše toto: ShowMessage( PopupMenu1.PopupComponent.ClassName );


Offline

Užívateľ
Užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18 | 18

Aha, moja chyba. Použil som to na TLabeledEdit (iná komponenta s label nad editom). Tak ma napadá otázka, ak by som chcel spraviť univerzálne PopupMenu tak, aby rozlišoval aká komponenta ho vyvolala a na základe toho potom následne pracovalo.

Neviem či píšem zrozumiteľne, skrátka vytvoriť tento systém aj pre Memo, aj Edit s tým, že by sa to potom asi vetvilo.. "ak je komponenta triedy TEdit, tak rob toto, ak je TMemo, tak rob toto".

// edit: heh, ja dneska fakt neuvažujem, veď príspevok nad týmto to obsahuje...
Klasika = TPopupMenu
Kód:
  if Klasika.PopupComponent.ClassType = TEdit then
    (Klasika.PopupComponent as TEdit).CopyToClipboard
  else if Klasika.PopupComponent.ClassType = TMemo then
    (Klasika.PopupComponent as TMemo).CopyToClipboard
  else if Klasika.PopupComponent.ClassType = TMaskEdit then
    (Klasika.PopupComponent as TMaskEdit).CopyToClipboard
  else
    ShowMessage('Neznámy typ!'); 


Offline

Skúsený užívateľ
Skúsený užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 11.01.09
Prihlásený: 26.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova

Áno, dalo by sa to aj takto, ale miesto ClassType treba použiť ClassName, čo je funkcia vracajúca reťazec (ClassType vracia objekt TClass):

Kód:
if ( Klasika.PopupComponent.ClassName = 'TEdit' ) then
  ( Klasika.PopupComponent as TEdit ).CopyToClipboard;
// tak podobne pre ostatne...


Offline

Užívateľ
Užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18 | 18

Len informatívne, ak by som napriek tomu porovnával ClassType, tak by to robilo problémy?


_________________
Bad news: Time flies. God news: You are the pilot!
Offline

Skúsený užívateľ
Skúsený užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 11.01.09
Prihlásený: 26.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova

Nie, nerobilo, ale zdalo sa mi, že to tak neskompiluje. Skúsil som to a ide to aj takto, takže teraz sa ospravedlňujem ja :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2 | 2

tak zase prispejem svojou troskou do mlyna :) kedze vsetky spominane komponenty maju jedneho z predkov TCustomEdit , tak som mal tu drzost hodit vam sem aj takuto moznost :)
Kód:
var I : Integer;
begin
  for I := 0 to Form1.ComponentCount - 1 do begin
    if Form1.Components[i].InheritsFrom(TCustomEdit) then
      TCustomEdit(Form1.Components[i]).CopyToClipboard;
    end;
end;

netvrdim ze doteraz uvadzane priklady su zle, no len som chcel ukazat aj moznost vyuzitia RTTI :)


Offline

Užívateľ
Užívateľ
Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18 | 18

Luxusne vyriešená téma :) Díky chlapi.


_________________
Bad news: Time flies. God news: You are the pilot!
 [ Príspevkov: 10 ] 


Ako nastaviť všetkým EditBoxom jedno PopUp menu s funkciami?



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Ako nastavit pomocou setlocale(LC_MONETARY ... menu EURO?

v PHP, ASP

12

793

19.04.2008 13:24

Frey

V tomto fóre nie sú ďalšie neprečítané témy.

PC zo vsetkym ako sa patri do 50 000 cca

[ Choď na stránku:Choď na stránku: 1, 2 ]

v PC zostavy

40

1595

04.10.2008 22:18

pukepulos

V tomto fóre nie sú ďalšie neprečítané témy.

Popup okienko (alebo ako sa to vola) pri tray ikonkach

v Operačné systémy Microsoft

1

526

05.03.2007 14:30

Tom@S

V tomto fóre nie sú ďalšie neprečítané témy.

Slúchadlá berie ako jedno s reprákmi

v Zvuk

1

476

17.12.2011 15:52

KocuR

V tomto fóre nie sú ďalšie neprečítané témy.

Ako nastaviť v notebooku výkonnejšiu grafiku ako primárnu.

v ATI/AMD grafické karty

0

922

12.12.2015 21:10

krakenis

V tomto fóre nie sú ďalšie neprečítané témy.

ako nastavit bs player ako predvoleny prehliadac?

v Video programy

1

901

22.07.2010 13:09

milosb

V tomto fóre nie sú ďalšie neprečítané témy.

Ako nastaviť video ako pozadie pracovnej plochy?

v Operačné systémy Microsoft

3

1605

31.03.2010 22:43

Googler1

V tomto fóre nie sú ďalšie neprečítané témy.

HD4870 , ako nastavit viac ako povoluje...

v Grafické karty

1

686

20.10.2008 9:03

Xaltotun

V tomto fóre nie sú ďalšie neprečítané témy.

W7 ako nastavit particiu ako recovery?

v Operačné systémy Microsoft

1

569

18.03.2016 15:25

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Ako nastaviť index.php ako homepage

v Redakčné systémy

4

896

01.09.2006 9:59

BaSkeR

V tomto fóre nie sú ďalšie neprečítané témy.

jedno horsie ako druhe ... Crystal CX4235 vs Sound Blaste 16

v Zvuk

7

566

25.11.2009 17:03

prandof

V tomto fóre nie sú ďalšie neprečítané témy.

Ako je možné, že všetky verzie Windows 7 vôjdú na jedno DVD?

v Optické zariadenia

3

631

19.04.2012 0:37

nBXXL

V tomto fóre nie sú ďalšie neprečítané témy.

Ako nastaviť opakovanie???

v HTML, XHTML, XML, CSS

1

634

11.04.2010 15:40

max-m

V tomto fóre nie sú ďalšie neprečítané témy.

Ako nastavit pripojenie?

v Operačné systémy Unix a Linux

3

689

30.10.2007 22:39

dodo_mt

V tomto fóre nie sú ďalšie neprečítané témy.

Ako nastaviť rutery .

v Siete

9

483

22.01.2023 1:53

eon5

V tomto fóre nie sú ďalšie neprečítané témy.

ako nastavit wifi

v Siete

2

2308

07.01.2009 14:39

br4n0



© 2005 - 2024 PCforum, edited by JanoF