IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @241
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Chcete darček pre svoje dieťa

Odpovedzte na otázky a vyhrajte! LEGO duplo 2 krát deňne do konca mesiaca www.duplo.lego.com

Sprostredkovávajte hypotéky

Začnite sprostredkovávať hypotéky s úspešným hypotekárnym centrom! www.SprostredkovanieUverov.sk

Aj ty si hokejový odborník?

Neseď iba pred televízorom a dokáž s vlastným tímom, že na to máš. www.hrajhokej.sk

Spoločnosti Online s.r.o.

Ponúkame čisté spoločnosti. Obchodný register vybavíme za vás! www.spolecnostionline.cz

Lacné ubytovanie pri Balatone

Ubytuj sa teraz až s 50% zľavou Akciové zľavy na viac ako 1000 ubytovaní szallasguru.sk

Delphi - object or class type required

Zaslať odpoveď
AutorSpráva
TheK.SVK
Užívateľ
Užívateľ

Založený: 07.08.2009
Príspevky: 18

PríspevokZaslal: Pi 09.10.09 17:59Odpovedať s citátomNávrat hore

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
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1049

PríspevokZaslal: Pi 09.10.09 18:24Odpovedať s citátomNávrat hore

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ť?)
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
TheK.SVK
Užívateľ
Užívateľ

Založený: 07.08.2009
Príspevky: 18

PríspevokZaslal: Pi 09.10.09 18:57Odpovedať s citátomNávrat hore

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;
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1049

PríspevokZaslal: Pi 09.10.09 19:15Odpovedať s citátomNávrat hore

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 .
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
TheK.SVK
Užívateľ
Užívateľ

Založený: 07.08.2009
Príspevky: 18

PríspevokZaslal: Pi 09.10.09 20:14Odpovedať s citátomNávrat hore

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.
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1049

PríspevokZaslal: Pi 09.10.09 20:52Odpovedať s citátomNávrat hore

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 napísal:
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);
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
TheK.SVK
Užívateľ
Užívateľ

Založený: 07.08.2009
Príspevky: 18

PríspevokZaslal: Pi 09.10.09 22:10Odpovedať s citátomNávrat hore

Fico napísal:

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
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1049

PríspevokZaslal: So 10.10.09 8:18Odpovedať s citátomNávrat hore

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ý.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
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.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd