Jak obnovit ztracenou položku menu? – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak obnovit ztracenou položku menu? – Delphi – Fórum – Programujte.comJak obnovit ztracenou položku menu? – Delphi – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
oxidián0
Grafoman
24. 5. 2017   #1
-
0
-

V Delphinu 7 se mi povedlo smazat položku Nástroje z menu a nevím jak to obnovit. Je to už uložené, takže to celé zmizlo. Mám tu původní verzi kde jsou původní zdroje... Dá se to nějak přesunout? Prostě jsem myslel že jsem vymazal Nástroje->Uživatel ale místo toho jsem smazal Nástroje, uložil a zkompiloval

Nahlásit jako SPAM
IP: 78.102.61.–
oxidián0
Grafoman
24. 5. 2017   #2
-
0
-

Rychlejší bylo to obnovit ručně, ale i tak by mě zajímalo jestli to jde.

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
24. 5. 2017   #3
-
0
-

#2 oxidián
nohlo by jít, otevřeš si starou verzi formulář si sobrazíš v textovém režimu a zkopíruješ si tu část menuitem - nástroje včetně těch položek. 


    object ools1: TMenuItem
      Caption = 'N'#225'stroje'
      GroupIndex = 2
      object createBook1: TMenuItem
        Caption = 'Vytvo'#345'it u'#269'ebnici'
        OnClick = createBook1Click
      end
      object N2: TMenuItem
        Caption = '-'
      end
      object history1: TMenuItem
        Caption = 'Historie test'#367
        OnClick = history1Click
      end
      object createOrEdit1: TMenuItem
        Caption = 'Vytvo'#345'it nebo editovat test'
        OnClick = createOrEdit1Click
      end
      object search1: TMenuItem
        Caption = 'Hled'#225'n'#237' soubor'#367
        OnClick = search1Click
      end
    end
// konec další část už se týká další položky menu Help
    object Help1: TMenuItem

tedy nezkoušel jsem to, otázkou je jestli se to správně promítne do kodu, možná bys pak musel ještě zkopírovat odpovídající část kodu. podle těch identifikací objektů.

Nahlásit jako SPAM
IP: 185.112.167.–
MilanL+1
Grafoman
24. 5. 2017   #4
-
0
-

#2 oxidián
Jinak takhle velkou předělávko sis v podstatě jen zavařil, malé úpravy ba ještě tak šli, ale ty překopáváš komplet program, to je kolikrát lepší ho vytvořit odznovu podle fungování vzoru.

Z objektového hlediska bys měl mít

třídu jména s položkami objektů (tříd)
                     -  nastavení (uživatelská nastavení fontů a pod)
                     - list výsledků testů (bud jen výsledky nebo včetně historie Otázek a odpovědí)
                     - aktuální test (může být prázdný nebo přerušený)

kazdá třída serializace pro ukládací nahrávací funkci
 

Nahlásit jako SPAM
IP: 185.112.167.–
peter
~ Anonymní uživatel
4016 příspěvků
25. 5. 2017   #5
-
0
-

Myslim si, ze by to melo jit nekde pozapinat nebo pretahnout ze seznamu. Hledej, googluj, treba. Pripadne muzes z delhpi vytahnout projekty a cele to smazat a preinstalovat :)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:4dbc:38...–
oxidián0
Grafoman
25. 5. 2017   #6
-
0
-

Není to tak těžké a až tak do detailu to neřeším. Stačí vytvořit pár menu... Uvažuju jestli by to šlo udělat tak, že by se do menu Učebnice->Hebrejština-> ... vypsaly všechny položky učebnic automaticky? Tam bude třeba programátorsky vytvořit ty objekty TMenuItem, co?

Nahlásit jako SPAM
IP: 78.102.61.–
peter
~ Anonymní uživatel
4016 příspěvků
25. 5. 2017   #7
-
0
-

Jo, to jde. To je nejake strukturovane pole. Zkus google, urcite najdes priklady.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:4dbc:38...–
MilanL+1
Grafoman
25. 5. 2017   #8
-
0
-
Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
25. 5. 2017   #9
-
0
-

#7 peter
TMenuItem je sám o sobě strukturovaný jako node, tzn není problém na jakékoliv úrovni cokoliv přidávat a rozšiřovat.

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
25. 5. 2017   #10
-
0
-

Jako bonus pak můžeš ke knihám do Hintu nebo další pasivní úrovně naházet ty detaily knihy (autora, vydání atd) př

Nahlásit jako SPAM
IP: 91.139.9.–
oxidián0
Grafoman
25. 5. 2017   #11
-
0
-

Dotaz: jakou událost mám aktivovat když v listbox1 kliknu na položku? Nebo jak přiřadit procedury události onClick či onSelect nebo s čím se tam pracuje? Jde mi o to, že když vyberu položku s listboxu tak by se formulář Book měl vyplnit údajema z té vybrané položky. Aby bylo možné učebnici zeditovat.

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
25. 5. 2017   #12
-
0
-

#11 oxidián
podívej se jak je to řešený v mainu u odpovědí, najdi si v designu formuláře ten listbox a koukni na eventy, myslím že to je ten event OnMouseUp a je tam i doubleclick ale to by sis musel vyzkoušet co je lepší.

Nahlásit jako SPAM
IP: 185.112.167.–
MilanL+1
Grafoman
25. 5. 2017   #13
-
0
-

#12 MilanL
jinak proceduru tam doplníš snadno, když v tom políčku pro proceduru eventu 2klikneš vytvoří se hlavička procedury sama a skočí ti to rovnou do editace funkce.

Nahlásit jako SPAM
IP: 185.112.167.–
oxidián0
Grafoman
25. 5. 2017   #14
-
0
-

Už to vidím je to ten kód

procedure TBooksDialog.ListBox1Click(Sender: TObject);
begin
   if listbox1.itemindex<>-1 then
    begin
     OKbtn.enabled:=true;
     ubrat.enabled:=true;
     caption:='Učebnice: '+
           listbox1.items[listbox1.itemindex];
    end;

end;

takže tam to doplním

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
25. 5. 2017   #15
-
0
-

#14 oxidián
jj to je při najetí a kliknutí (označení položky) dá se udělat i multi select, nebo jedno kliknutí označení a druhý (ne doubleclick) odznačení, na double si pak můžeš udělat proceduru na editaci, kdy se ti tam do formuláře načtou všechny ty údaje.

Nahlásit jako SPAM
IP: 185.112.167.–
oxidián0
Grafoman
25. 5. 2017   #16
-
0
-

Omylem jsem označil za vyřešené. Jen potřebuju dořešit tuhle věc:

procedure TBooksDialog.ListBox1Click(Sender: TObject);
begin
   if listbox1.itemindex<>-1 then
    begin
     OKbtn.enabled:=true;
     ubrat.enabled:=true;
     caption:='Učebnice: ' + listbox1.items[listbox1.itemindex];
     BookList := TStringList.Create;
     try
       ExtractStrings([';'], [], PChar(listbox1.items[listbox1.itemindex]), BookList);
       edit1.text := BookList[5];
       edit2.text := BookList[0];
       edit3.text := BookList[1];
       edit4.text := BookList[2];
       edit5.text := BookList[3];
       edit6.text := BookList[4];
     finally
       BookList.Free;
     end;
    end;
end;


Když dám do kukátka BookList.text tak tam vidím asi jen 4 položky, ale má hich být 7. Takže mi to krachuje u


edit1.text := BookList[5];
 

protože index 5 tam není. To je normální tohle omezení? Mám použít jinou techniku na splitování? Tohle se mi zdálo elegantní.

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
25. 5. 2017   #17
-
0
-

#16 oxidián
já mám na splitování vlastní knihovnu, ale tím to nebude, jde spíš o to jestli máš ve vybraným řádku opravdu 5 položek oddělených středníkem a pozor otázkou je jak se chovají třeba 2 středníky vedle sebe.

EDIT: pošli aktuální stav včetně uloženejch věcí, já to nemám s čím zkouknout a chybí mi tam asi něco co jsi dnes dělal.

Nahlásit jako SPAM
IP: 185.112.167.–
oxidián0
Grafoman
25. 5. 2017   #18
-
0
-

Jo tak to bude těma dvěma středníkama vedle sebe oni se některé záznamy nemusí vyplnit... Jako třeba vydavatelství a rok vydání mi tam chybí.

procedure TBooksDialog.PridatClick(Sender: TObject);
var s: string;
begin
 if (edit1.text='') or (edit2.text='') or (edit3.text='') then exit;
 s := edit2.text + ';' + edit3.text + ';' + edit4.text + ';' + edit4.text + ';' + edit5.text + ';' + edit6.text + ';' + edit1.text + ';' + edit7.text;
 listbox1.items.add(s);
 listbox1.items.savetofile(booksFileName);
 listbox1.itemindex:=listbox1.items.indexof(edit1.text);
 edit1.text:='';
 ubrat.enabled:=true;
 OKbtn.enabled:=true;
end;


Vyzkouším co to udělá, když vyplním vše... Jo tak je to tím. Takže tam musím dát ještě mezeru když je to prázdné?

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
25. 5. 2017   #19
-
0
-

#18 oxidián

jo nejspíš aspon mezeru, ten můj textparser by si s tím v pohodě poradil, umí rozdělovat podle jakýho koliv znaku nebo i delší značky jako je ttřeba dvojznak CRLF.

Případně si do prázdných políček dej nějakej znak třeba -  nebo X

Nahlásit jako SPAM
IP: 185.112.167.–
oxidián0
Grafoman
26. 5. 2017   #20
-
0
-

Hlásím ještě jeden problém

procedure TBooksDialog.Edit1Enter(Sender: TObject);
begin
  listbox1.itemindex:=-1;
  ubrat.enabled:=false;
  Okbtn.enabled:=false;
  if isLoaded then clearEdits;
  isLoaded := true; // Edit1Enter se spouští automaticky po otevření formuláře
end;

Situace:

Otevřu formulář. Caption se načtou do polí dle defaultních hodnot. Pak kliknu na položku v listboxu a načtou se data do formuláře. Až sem vše v pohodě. Ale dále je problém. Když změním fokus na nějaké pole edit, tak se spouští tato funkce. Tím pádem příkaz:

if isLoaded then clearEdits;

vymaže textové hodnoty z polí edit.

Tato funkce  Edit1Enter se spouští i po otevření formuláře a proto tam je ta podmínka if isLoaded  aby se nevymazala defaultní captions.

Pochopitelně potřebuju vymazat pole edit až po vložení učebnice do seznamu anebo po uzavření toho okna. Tedy kam mám to clearEdit; strčit? Tady to nevyhovuje.
 

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
26. 5. 2017   #21
-
0
-

#20 oxidián
otoč bud tu podmínku

if not isloaded then clear...

nebo po podmínce zneguj hodnotu isLoaded.

isLoaded := false

jinak ti to bede dělat furt dokola

Nahlásit jako SPAM
IP: 185.112.167.–
oxidián0
Grafoman
26. 5. 2017   #22
-
0
-

isLoaded odráží stav bezprostředně po otevření formuláře

řeč je o tomto stavu:


if 1 then clearEdits;
 

1 je jistě dobře. Otázka je proč se pokaždé spouští ta funkce když kliknu na edit čili když defokusuju listbox

Nahlásit jako SPAM
IP: 78.102.61.–
oxidián0
Grafoman
26. 5. 2017   #23
-
0
-

počkat to enter znamená, jako že jsem dal focus na pole?
TBooksDialog.Edit1Enter
Do jaké funkce mám dát ten kód když se má spouštět poté co potvrdím změnu?

Zkoušel jsem toto:

procedure TBooksDialog.Edit1Exit(Sender: TObject);
begin
  if isLoaded then clearEdits;
end;


místo předchozího, to je lepší, ale když z edit7 kliknu na edit1 nebo když kliknu na Přidat (knihu) tak se vše vymaže a do listboxu se nepřidá nic.

Jo a ještě mám dotaz co musím udělat aby když mačkám tabulator od edit1 až po edit7 aby fokus nepřeskakoval napřeskáčku ale postupně pole za polem?

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
26. 5. 2017   #24
-
0
-

#23 oxidián
no jestli se to má dělat jen při otevření formuláře, tak Form event Show.

případně v po tom provedení tu proměnou isLoaded změnit !!!

Vem si co to má dělat - v podstatě to nemá mít nic společného s EDIT polema

Nahlásit jako SPAM
IP: 91.139.9.–
oxidián0
Grafoman
26. 5. 2017   #25
-
0
-

Právě naopak. Po zobrazení formuláře to nedělá nic. Po kliknutí na přidat nebo ubrat vyčistím edity. To mám. Ale teď potřebuju funkci, která se spustí po uzavření dialogového okna. Vidím událost OnDestroy tak tu zkusím.

No a nefunguje mi to (když zavřu nebo zruším formulář).

procedure TBooksDialog.destroy(Sender: TObject);
begin clearEdits; end;
end.


Jinak ono by to fungovalo kdybych na tlačítka OK a Zrušit dal onclick--- clearEdits ale to není jedna funkce, událost pro to uzavření formuláře?

Nahlásit jako SPAM
IP: 78.102.61.–
oxidián0
Grafoman
26. 5. 2017   #26
-
0
-

už to mám vyřešeno.

Nahlásit jako SPAM
IP: 78.102.61.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 17 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý