Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
procedure Thra.NakolaClick(Sender: TObject); // vyber typu hry
begin
ModhryV:=3;
TypHryName:='Nakola';
end;
procedure Thra.SetModHry (TypHryName: string); // zmeni nazov prave vybranej polozky
begin
NaKola.caption:='Na Kola';
NaVitazstva.Caption:='Na Vitazstva';
Volny.Caption:='Volny';
TypHryName.Caption:=TypHryName + ' (teraz)'; // prida k vybranej polozke "teraz"
Hra.Hide;
ModW.Show;
end;
Je to cast kodu z Kamen Papier Noznice a mam nasledujuci problem - na riadku:
TypHryName.Caption:=TypHryName + ' (teraz)';
Hlasi chybu: Record, object or class type required. Vobec nemam tusenia co samu nepaci. Ono to vlastne meni nazov vopred neurcitej polozky, ale myslel som ze s tym nebudu problemy.
Dakujem
//viem ze by sa to dalo urobit aj inak, ale zamerne som chcel vyuzit parameter
|
|
Registrovaný: 11.01.09 Prihlásený: 08.01.25 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Z programového hľadiska tam nemáš chybu, takže z takého výcucu kódu ťažko určiť chybu. Na ostatných labeloch to neukazuje? Skús tomuto labelu priradiť iba konštantný údaj (čiže iba niečo v úvodzovkách), či to takisto vyhlási chybu.
(a ešte otázka: Je to run time error, alebo sa to nedá skompilovať?)
|
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
Pokial dosadim dosadim pred .caption nieco s pevnou hodnotou tak to problemy nerobi....a chybu vyhlasuje pri kompilacii
Este pridavam aj deklaraciu...
Kód: unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus;
type Thra = class(TForm) Noznice: TButton; Kamen: TButton; Papier: TButton; ShowSelect: TLabel; vyber: TLabel; PC: TLabel; VysledokHry: TLabel; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; AIStav: TLabel; HRStav: TLabel; MainMenu1: TMainMenu; f1: TMenuItem; ResetButt: TMenuItem; Ukoncithru1: TMenuItem; Modhry: TMenuItem; Volny: TMenuItem; Navitazstva: TMenuItem; Nakola: TMenuItem; Button1: TButton; Label5: TLabel;
procedure KamenClick(Sender: TObject); procedure PapierClick(Sender: TObject); procedure NozniceClick(Sender: TObject); procedure ZmenitVyber; procedure SpolVyber; procedure ResetButtClick(Sender: TObject); procedure Reset; procedure Ukoncithru1Click(Sender: TObject); procedure VolnyClick(Sender: TObject); procedure NavitazstvaClick(Sender: TObject); procedure NakolaClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure SetModHry(TypHryName: string);
private
public
end;
var hra: Thra;
PCvolba,HRvolba,rozhodca:byte; AIstavV, HRstavV, MODhryV:byte; vysledok,pocet:integer; selected,ModHryStav,TypHryName,pomoc:string;
|
|
Registrovaný: 11.01.09 Prihlásený: 08.01.25 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Dobre, že si nám vypísal aj deklaráciu, pretože je krásne vidieť chybu --> z premennej TypHryName, ktorá je typu string, si urobil TMenuItem. Ak má byť TypHryName položka v menu, tak ju treba pridať na formulár. A ak má byť string, tak jednoducho odstráň .caption .
|
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
No ale v tom pripade, ak z nej spravim TMenuItem, nemozem do nej ulozit potrebny nazov pri vybere polozky...tj
Kód: procedure Thra.NavitazstvaClick(Sender: TObject); begin ModhryV:=2; TypHryName:='Na vitazstva'; SetModHry (TypHryName); end;
... nekompatibilne typy String a TMenuItem
A v podstate si tym padom uvedomujem ze to co som chcel urobit asi nebude mozne... ja totiz potrebujem do toho napisu preniest stringovu hodnotu. Co nie je mozne...
No kazdopadne dakujem za pomoc, pochopil som preco mi to vlastne nejde.
A mam este jednu otazku:
Je mozne nejak zavolat metodu ktora sa nachadza pod urcitym tlacidlom ? Myslim ze by to casto krat usetrilo cas.
|
|
Registrovaný: 11.01.09 Prihlásený: 08.01.25 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Moment, keď som si prešiel celý tvoj kód ešte raz, asi mi došlo, čo to malo robiť. Takže sa ešte raz pýtam:
1.) Chceš, aby procedúra Thra.SetModHry (TypHryName: string) pridala k názvu položky TypHryName (ktorý je parameter tejto funkcie) text '(teraz)' ???
2.) Máš iba 3 MenuItemy: NaKola, NaVitazstva, Volny ? A chceš priraďovať text '(teraz)' iba medzi nimi?
Ak áno, tak zabudni na to, čo som písal pred tým, iba pridaj do prvého príspevku toto:
Kód: for i:= 0 to (Form1.ComponentCount-1) do if (Form1.Components[i] is TMenuItem) then if (Form1.Components[i] as TMenuItem).Caption = TypHryName then (Form1.Components[i] as TMenuItem).Caption:= TypHryName + ' (teraz)'; Táto časť kódu vahľadá menu položku s názvom, ktorý je v premennej TypHryName (typu string) a pridá k nemu text '(teraz)'. Snáď to je to, čo si chcel. TheK.SVK píše: Je mozne nejak zavolat metodu ktora sa nachadza pod urcitym tlacidlom ? Ak sa napríklad daná metóda volá Button1Click, tak takto:) Kód: Button1Click(nil);
|
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
Fico píše: 1.) Chceš, aby procedúra Thra.SetModHry (TypHryName: string) pridala k názvu položky TypHryName (ktorý je parameter tejto funkcie) text '(teraz)' ???
2.) Máš iba 3 MenuItemy: NaKola, NaVitazstva, Volny ? A chceš priraďovať text '(teraz)' iba medzi nimi? Presne tak, Ano je odpoved na obidve otazky. Tak som skusil ten tvoj kod, skompilovat skompiluje, ale nefunguje. Neviem este preco, pokusim sa este blizsie analyzovat tvoj kod a celkovo cely ten proces a odhalit tu zradu... Citácia: Ak sa napríklad daná metóda volá Button1Click, tak takto:) Kód: Button1Click(nil); Funguje, je to parada Velke dakujem ti patri //yahooo Podarilo sa mi pochopit tvoj kod a najst chybu... (predvoleny caption tych tlacidiel sa odlisovat od nazvov pod stringom TypHryName a pre to nenaslo rovnost => nesplnilo podmienku.... Ale comu nerozumiem, preco je tu Kód: for i:= 0 to (Form1.ComponentCount-1)
...este odcitavanie -1
|
|
Registrovaný: 11.01.09 Prihlásený: 08.01.25 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Odpoveď je jednoduchá. Lebo pole Form1.Components[i] začína od nuly a má veľkosť Form1.ComponentCount. Čiže ak máš na formulári 5 komponentov, tak pole vyzerá takto: [0, 1, 2, 3, 4] --> posledný prvok je 5-1 a počet všetkých prvkov je 5.
// To indexovanie poľa s nulou na začiatku sa implicitne používa v jazyku C. Takýto postup v cykloch je tam bežný.
|
|
Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Technológia .NET | 9 | 2770 | 31.08.2017 15:10 focko | | v Delphi, Visual Basic | 1 | 839 | 10.09.2009 16:35 Fico | | v Pamäte | 3 | 715 | 16.12.2010 20:09 majky358 | | v JavaScript, VBScript, Ajax | 9 | 535 | 17.12.2015 10:33 chrono | | v Delphi, Visual Basic | 3 | 1153 | 11.05.2008 12:02 p360t | | v PHP, ASP | 8 | 741 | 14.10.2009 22:39 davider137 | | v HTML, XHTML, XML, CSS | 1 | 669 | 12.02.2008 11:00 walther | | v Assembler, C, C++, Pascal, Java | 1 | 647 | 27.09.2011 23:42 Forty- | | v JavaScript, VBScript, Ajax | 2 | 514 | 02.10.2010 18:21 TECHNODROME | | v HTML, XHTML, XML, CSS | 10 | 748 | 27.04.2007 11:10 vladopt | | v HTML, XHTML, XML, CSS | 6 | 615 | 23.03.2011 19:39 weroro | | v PHP, ASP | 6 | 519 | 26.04.2010 16:40 petanorech | | v Optické zariadenia | 1 | 1407 | 21.08.2005 15:34 Carlos | | v PHP, ASP | 5 | 823 | 25.03.2007 11:30 p360t | | v Počítačové hry | 4 | 1135 | 26.02.2017 23:04 bony7x | | v HTML, XHTML, XML, CSS | 1 | 525 | 25.06.2007 7:03 zero0x |
|