Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ 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
Príspevok NapísalOffline : 29.07.2010 16:35

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ý: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 29.07.2010 18:06

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
Príspevok Napísal autor témyOffline : 30.07.2010 9:27

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ý: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 30.07.2010 9:52

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
Príspevok Napísal autor témyOffline : 30.07.2010 10:33

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ý: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 30.07.2010 11:35

Á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
Príspevok Napísal autor témyOffline : 30.07.2010 13:13

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ý: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 30.07.2010 13:19

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
Príspevok NapísalOffline : 30.07.2010 16:54

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
Príspevok Napísal autor témyOffline : 01.08.2010 22:22

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







_________________
Bad news: Time flies. God news: You are the pilot!
Odpovedať na tému [ Príspevkov: 10 ] 


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

737

19.04.2008 13:24

Frey Zobrazenie posledných príspevkov

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

1548

04.10.2008 22:18

pukepulos Zobrazenie posledných príspevkov

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

495

05.03.2007 14:30

Tom@S Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Slúchadlá berie ako jedno s reprákmi

v Zvuk

1

447

17.12.2011 15:52

KocuR Zobrazenie posledných príspevkov

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

841

12.12.2015 21:10

krakenis Zobrazenie posledných príspevkov

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

1519

31.03.2010 22:43

Googler1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ako nastavit bs player ako predvoleny prehliadac?

v Video programy

1

858

22.07.2010 13:09

milosb Zobrazenie posledných príspevkov

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

516

18.03.2016 15:25

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. HD4870 , ako nastavit viac ako povoluje...

v Grafické karty

1

632

20.10.2008 9:03

Xaltotun Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako nastaviť index.php ako homepage

v Redakčné systémy

4

842

01.09.2006 9:59

BaSkeR Zobrazenie posledných príspevkov

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

522

25.11.2009 17:03

prandof Zobrazenie posledných príspevkov

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

595

19.04.2012 0:37

nBXXL Zobrazenie posledných príspevkov

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

v Monitory, televízory a projektory

3

1496

07.08.2009 11:35

shiro Zobrazenie posledných príspevkov

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

v Siete

1

662

28.03.2010 7:01

Jaro Zobrazenie posledných príspevkov

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

v Siete

9

423

22.01.2023 1:53

eon5 Zobrazenie posledných príspevkov

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

v ATI/AMD grafické karty

1

643

05.02.2010 0:07

OmeGa Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra