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

Hľadáte našu pobočku?

Zoznam všetkých zastúpení a pobočky UNIQA poisťovne na Slovensku. www.uniqa.sk

Diéty, ktoré fungujú

Ktoré diéty sú aj jednoduché aj viditeľne účinné? www.news2channel.net

Fúkače a vysávače lístia

Ľahko ovládateľný fúkač s funkciou vysávania lístia a nečistôt. www.husqvarna.sk

Náhradné diely pre Ford

Najväčšie slovenské Ford vrakovisko. Tu určite nájdete čo hľadáte. autolandia.sk

Priprav sa na futbalové EURO

Exkluzívna súťaž o Ford Fiesta! Kurzová superponuka a bonus 100€ https://www.tipsport.sk

Delphi - dedenie, zapuzdrenie, OOP...

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

Založený: 07.08.2009
Príspevky: 18

PríspevokZaslal: Pi 16.10.09 18:43Odpovedať s citátomNávrat hore

No predpokladam ze v najblizsej dobe budem potrebovat s tymito temami este nejaku pomoc, kazdopadne prave teraz tu mam toto...

kód:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TObrazec = class      { identifikátory typu* je zvykem
                          psát s "T" na zac(átku }
  private               { specifikátor viditelnosti,
                          viz stránka o zapouzdr(ení }
    Fbarva : integer;   { identifikátory privátních prome(nných
                          bývá zvykem psát s "F" na zac(átku }
  public                { specifikátor viditelnosti,
                          viz stránka o zapouzdr(ení }
    X, Y :   integer;   { sour(adnice str(edu }
    procedure Vykreslit;{ z procedur a funkcí se zda zapíší pouze hlavic(ky }
    procedure Smazat;
    procedure Presunout(NoveX, NoveY: integer);
    procedure Prebarvit(NovaBarva: integer);
  end; { konec deklarace tr(ídy TObrazec }

  TObdelnik = class(TObrazec) { Tr(ída TObdelnik je zde(de(na z tr(ídy TObrazec }
  public
    Vyska: integer;
    Sirka: integer;
    procedure Zvetsit(NovaVyska,NovaSirka:integer);
  end; { TObdelnik }

  TKruh = class(TObrazec)     { Tr(ída TKruh je zde(de(na z tr(ídy TObrazec }
  public
    Polomer: integer;
    procedure Zvetsit(NovaVyska,NovaSirka:integer);
  end; { TKruh }

var
  form1: Tform;
  O : TObdelnik;        { Instance objektu* jsou v sekci INTERFACE, }
  K : TKruh;            { aby tyto objekty byly viditelné zvne(jšku }

implementation
{$R *.dfm}

{ V c(ásti IMPLEMENTATION se dodefinují te(la všech metod všech tr(íd.
  Povšimne(te si, že pr(ed názvem metody se musí uvést jméno tr(ídy,
  ke které ta metoda patr(í (odde(lené tec(kou). To proto, že stejné
  jméno metody mu*že být ve více tr(ídách, jako zde v pr(ípade( Zvetsit. }
procedure TKruh.Zvetsit;
begin
// tady je program pro zve(tšení kruhu
end;

procedure TObrazec.Vykreslit;
begin
// ne(jaký program
end;

procedure TObrazec.Smazat;
begin
// ne(jaký program
end;

procedure TObrazec.Prebarvit(NovaBarva: integer);
begin
// ne(jaký program
end;

procedure TObrazec.Presunout(NoveX, NoveY: integer);
begin
//fdsfsd
end;

procedure TObdelnik.Zvetsit;
begin
//sdasdsa
end;

end.


Je to kod ktory som nepisal ja, no aj tak netusim preco, nejde ako ma. Ani za toho aby som mohol napriklad v triede obdlzniku dedit nieco z Tobrazec. Vazne nerozumiem preco, pozeral som som viacej navodov, ale asi som uz fakt mimo, vazne neviem v com je problem.
Preco teda nemozem vytvorit napriklad proceduru TObdelnik.Smazat ? Pri takomto pokuse kompilator hlasi neznamy identifikator Smazat...
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 16.10.09 19:19Odpovedať s citátomNávrat hore

TheK.SVK napísal:
aby som mohol napriklad v triede obdlzniku dedit nieco z Tobrazec

Ale trieda TObdlznik je odvodená z triedy TObrazec (takisto aj trieda TKruh), to znamená, že má tie isté premenné a metódy (funkcie, procedúry, vlastnosti) + svoje premenné a metódy. Lenže nerobí sa to cez triedu - TObdelnik.Smazat, ale cez inštanciu triedy:
kód:
o.Smazat

(TObdelnik.Smazat sa nedá zadefinovať, pretože už je definované ako TObrazec.Smazat)

o je deklarované ako TObdelnik (viz var) a teda dedí aj procedúru Smazat od svojho predchodcu (TObrazec).

Ak sú ešte nejaké nejasnosti alebo ak som to nevysvetlil dosť zreteľne, pýtaj sa.
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 16.10.09 20:46Odpovedať s citátomNávrat hore

No jasne, chapem, velka vdaka
Zobraziť informácie o autoroviOdoslať súkromnú správu
TheK.SVK
Užívateľ
Užívateľ

Založený: 07.08.2009
Príspevky: 18

PríspevokZaslal: Ut 27.10.09 21:45Odpovedať s citátomNávrat hore

Urobil som taky zjednoduseny model situacie do ktorej som sa dostal... velmi jednoducha, akurat ze neviem ako ju riesit a aky je dovod vysledku....

kód:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
  constructor Create;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    x,y:integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TForm1.Create;
begin
x:=5;
y:=100;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1:=TForm1.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:=IntToStr(x);
label2.Caption:=IntToStr(y);
end;

end.

Moja nejasnost: Po kliknuti na Button1 sa zobrazi vysledok 0 a 0 miesto 5 a 100. Preco ?

_________________
MB: Gigabyte GA MA790X, CPU: AMD Phenom II X3 720@ 3.5Ghz, VGA: Gibayte GTX275UD-896I, PSU: CoolerMaster M620, HDD:WesternDigital 6400AAKS, CPU chladic:CoolerMaster Hyper 212, CASE: CoolerMaster Elite 330, 2xAiren RedWings ThermoControl
Zobraziť informácie o autoroviOdoslať súkromnú správu
programator
Užívateľ
Užívateľ

Založený: 02.09.2005
Príspevky: 156

PríspevokZaslal: St 28.10.09 16:15Odpovedať s citátomNávrat hore

Konstruktor "constructor TForm1.Create;" ti je zbytocny... vymaz ho a priradenia napis do procedury "procedure TForm1.FormCreate(Sender: TObject);". Nie je potrebne vytvarat konstruktor, pretoze form ho ma a delphi si ho automaticky obsluhuje.

_________________
Múdry nie je ten, čo veľa vie, ale ten, kto vie, čo je treba. (Thomas Alva Edison)
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: St 28.10.09 23:57Odpovedať s citátomNávrat hore

programator napísal:
Konstruktor "constructor TForm1.Create;" ti je zbytocny... vymaz ho a priradenia napis do procedury "procedure TForm1.FormCreate(Sender: TObject);". Nie je potrebne vytvarat konstruktor, pretoze form ho ma a delphi si ho automaticky obsluhuje.

Ja viem, nejde o to ze by som to nevedel urobit tak ako si napisal, ale nevedel som preco to neslo tak ako som to napisal... riesenie bolo ze som musel urcit aj triedu x a y bud pri priradeni hodnoty v konstruktore, alebo pri ich ukladani do labelu...
Form1.x:=5;
Form1.y:=100; ... alebo
label1.Caption:=IntToStr(form1.x);
label2.Caption:=IntToStr(form1.y);
.... Otazkou mi vsak zostava preco je to tak ? Vie mi to niekto vysvetlit ?

_________________
MB: Gigabyte GA MA790X, CPU: AMD Phenom II X3 720@ 3.5Ghz, VGA: Gibayte GTX275UD-896I, PSU: CoolerMaster M620, HDD:WesternDigital 6400AAKS, CPU chladic:CoolerMaster Hyper 212, CASE: CoolerMaster Elite 330, 2xAiren RedWings ThermoControl
Zobraziť informácie o autoroviOdoslať súkromnú správu
TheK.SVK
Užívateľ
Užívateľ

Založený: 07.08.2009
Príspevky: 18

PríspevokZaslal: So 07.11.09 16:36Odpovedať s citátomNávrat hore

Mam novu otazku.... Ake su obmedzenia pre vlastnosti visible a enabled ? V niektorych castiach kodu mi proste vobec nereaguju
Napriklad:
kód:
 begin
  vyhodnotenie:=TVyhodnotenie.create (Application);
  Vyhodnotenie.Show;
  Hra.Visible:=false;
 end;

Pri po vytvoreni noveho formulara sa ma byt formular Hra neviditelny, avsak nic take sa nestane, stale ho vidim, napriek tomu ze po overeni podmienkou
if hra.Visible=false then label1.Caption:='invisible' zistujem, ze tu neviditelnost skutocne nastavenu ma. Ale aj tak ho vidim. Podobne nefunguje v tomto pripade ani vlastnost enabled.
*confused*
Procedure Hide taktiez "nefunguje"....

_________________
MB: Gigabyte GA MA790X, CPU: AMD Phenom II X3 720@ 3.5Ghz, VGA: Gibayte GTX275UD-896I, PSU: CoolerMaster M620, HDD:WesternDigital 6400AAKS, CPU chladic:CoolerMaster Hyper 212, CASE: CoolerMaster Elite 330, 2xAiren RedWings ThermoControl
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: Ne 08.11.09 11:54Odpovedať s citátomNávrat hore

Pošli viac kódu (najlepšie unit, v ktorom je hlavný formulár a projekt), inak sa môžme len domnievať, čo je čo a ako vlastne myslíš svoju otázku. Obmedzenia pre visible? Žiadne obmedzenia nie sú. Musíš si proste uvedomiť, že ak použiješ Visible:= false na formulár, ktorý ešte nie je vykreslený, tak sa to neaplikuje.
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: Ne 08.11.09 14:52Odpovedať s citátomNávrat hore

No tak vcera som este skusal par veci, a zistil som...

1)Ako si spomenul,ze visible mozem menit az po vykresleni

2)Ze ak je hlavny formular uz vykresleny, a chcem mu menit viditelnost napriklad pri kliknuti na tlacidlo, mozem tak urobit jedine pomocou
kód:
procedure THlavnyFormular.Button1Click(Sender: TObject);
begin
Application.Mainform.Visible:=false
end;

, zatial co na vedlajsom formulari tak mozem urobit priamo ako
kód:
procedure TFormular2.Button1Click(Sender: TObject);
begin
Formular2.Visible:=false
end;


3)Rovnako to funguje aj s vlastnostou enabled...

Je to proste take pravidlo alebo sa k tomu da dodat nieco na vysvetlenie ?

_________________
MB: Gigabyte GA MA790X, CPU: AMD Phenom II X3 720@ 3.5Ghz, VGA: Gibayte GTX275UD-896I, PSU: CoolerMaster M620, HDD:WesternDigital 6400AAKS, CPU chladic:CoolerMaster Hyper 212, CASE: CoolerMaster Elite 330, 2xAiren RedWings ThermoControl
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: Ne 08.11.09 17:29Odpovedať s citátomNávrat hore

A si si istý, že ti toto nefunguje?
kód:
procedure THlavnyFormular.Button1Click(Sender: TObject);
begin
Visible:=false
end;
Lebo mne to riadne skryje formulár (aj keď ich je viac, skryje ten správny).
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: Po 09.11.09 19:38Odpovedať s citátomNávrat hore

Fuh, no veru nie, ale ako vravis, v novovytvorejenj cistej aplikacii to funguje bez problemov. Ked zadam kontrolnu podmienku ktora mi zisti ci je alebo nie je formular viditelny, pise ze viditelny nie je. Pri tom ho tam vsak stale mam.
Pri tom to nefunguje hned po tom, ako sa vykonaju urcite operacie v konstruktore kde sa len priraduju obrazky do pola obrazkov. S viditelnostou nikde nic nemenim.
No nic, asi to uz nejdem riesit, vyzera to ze mainform.visible funguje naozaj "univerzalne", hlavne ze ide...

_________________
MB: Gigabyte GA MA790X, CPU: AMD Phenom II X3 720@ 3.5Ghz, VGA: Gibayte GTX275UD-896I, PSU: CoolerMaster M620, HDD:WesternDigital 6400AAKS, CPU chladic:CoolerMaster Hyper 212, CASE: CoolerMaster Elite 330, 2xAiren RedWings ThermoControl
Zobraziť informácie o autoroviOdoslať súkromnú správu
TheK.SVK
Užívateľ
Užívateľ

Založený: 07.08.2009
Príspevky: 18

PríspevokZaslal: So 21.11.09 21:03Odpovedať s citátomNávrat hore

Dnes som narazil na taky problem...
Mam nejake obrazky na formulari, pri kliknuti na ne sa premiestnuju. Avsak nesmu sa premiestnovat dva naraz. Potrebujem aby sa premiestnil jeden, a az potom sa dal premiestnit iny. Pohyb prebieha cez vlakna.

1)Mam proceduru CheckMove ktora prebehne len ak neprebieha nejake vlakno. To zistuje pomocou boolean premennej DONE.

2)CheckMove nadvazuje na MoveImage ktora zistuje kam ho treba posunut a aktivuje potrebne vlakno (hore, dole, vlavo, vpravo). Pred zavolanim vlakna urci ze DONE:=false;

3)Vlakno posuva obrazok a nakoniec nastavi DONE:=true;

Problem je v tom, ze procedura CheckMove prebehne cela aj napriek tomu, ze je spustene uz nejake vlakno. Absolutne nerozumiem ako je to mozne, kontroloval som to a po cely cas behu toho vlakna done=false;

Osekany kod pre prehladnost, ziadne veci ktore by mali suvis s premennou done som nezmazal.

kód:
procedure Thra.CheckMove;
begin
if DONE then
   begin
      ......................................................
      kod ktory dalej pokracuje do THra.MoveImage;
      ......................................................
   end;
end;





Procedure Thra.MoveImage;
var zhora,zlava:integer;
begin
DONE:=false;
...................................................................................................................
kod s podmienkami kde sa rozhodne ktore vlakno sa spusti - hore, dole,vlavo alebo vpravo
...................................................................................................................
While DONE=false do Application.ProcessMessages;

end;




procedure TPosunToRightThread.Execute;
begin
 FreeOnTerminate := True;

      ................................................
      cyklus ktory posuva obrazok o 1px
      .................................................

    DONE := True;
end;

_________________
MB: Gigabyte GA MA790X, CPU: AMD Phenom II X3 720@ 3.5Ghz, VGA: Gibayte GTX275UD-896I, PSU: CoolerMaster M620, HDD:WesternDigital 6400AAKS, CPU chladic:CoolerMaster Hyper 212, CASE: CoolerMaster Elite 330, 2xAiren RedWings ThermoControl
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 21.11.09 21:44Odpovedať s citátomNávrat hore

TheK.SVK napísal:
Problem je v tom, ze procedura CheckMove prebehne cela aj napriek tomu, ze je spustene uz nejake vlakno.

Ak som to pochopil správne, tak ak je tá procedúra v nejakom takom tvare:
kód:
procedure Thra.CheckMove;
begin
if DONE then
   begin
     
      // nejaky kod

      // proceduera THra.MoveImage

      // * nejaky dalsi kod, ktory sa uz nema vykonat, ak je DONE false

   end;
end;

tak kód od hviezdičky sa už nemá vykonať v prípade (DONE = false) ?
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: So 21.11.09 21:51Odpovedať s citátomNávrat hore

No CheckMove konci uz len zavolanim MoveImage.... aby nedoslo k nedorozumeniu, pridavam cely kod problemovej casti...

//edit: ono mozem to urobit tak ze na zaciatku MoveImage dam Application.Mainform.Enabled:=false, a na koniec metody MoveImage znova true, ale to sposobuje ten neprijemny zvuk a myslim si ze je to lamsky sposob riesenia...

kód:
procedure Thra.CheckMove;
begin
if done then
 begin
    if ((Obrazky[Xinvis,Yinvis].top * Obrazky [Xclicked,Yclicked].Top<>4400))
    and (Obrazky[XInvis,Yinvis].Left=obrazky[XClicked,Yclicked].Left) then MoveImage;

    if ((Obrazky[Xinvis,Yinvis].left * Obrazky [Xclicked,Yclicked].left<>816))
    and (Obrazky[XInvis,Yinvis].Top=obrazky[XClicked,Yclicked].Top) then MoveImage;
 end;
end;


Procedure Thra.MoveImage;
var zhora,zlava:integer;
begin
if FirstClick=true then
   begin
    StartTime:= Now();
    FirstClick:=false;
   End;

Zhora:=obrazky [xclicked,yclicked].Top;
Zlava:=Obrazky [xclicked,yclicked].Left;
Done:=false;
if not done then label1.Caption:='disabled';


 if obrazky [Xclicked,Yclicked].Top=obrazky [Xinvis,Yinvis].Top then begin
   if obrazky [Xclicked,Yclicked].Left>obrazky [Xinvis,Yinvis].Left then begin
     ToLeftThread := TposunToLeftThread.Create(false);
   end;
end;

 if obrazky [Xclicked,Yclicked].Top=obrazky [Xinvis,Yinvis].Top then begin
   if obrazky [Xclicked,Yclicked].Left<obrazky [Xinvis,Yinvis].Left then begin
   ToRightThread:= TposunToRightThread.Create(false);
   end;
end;

 if obrazky [Xclicked,Yclicked].Left=obrazky [Xinvis,Yinvis].Left then begin
   if obrazky [Xclicked,Yclicked].Top>obrazky [Xinvis,Yinvis].Top then begin
    ToDownThread:= TposunToDownThread.Create(false)
   end;
end;

 if obrazky [Xclicked,Yclicked].Left=obrazky [Xinvis,Yinvis].Left then begin
   if obrazky [Xclicked,Yclicked].Top<obrazky [Xinvis,Yinvis].Top then begin
    ToUpThread   := TposunToUpThread.Create(false);
   end;
end;

While Done=false do Application.ProcessMessages;
if done then label1.Caption:='enabled';

obrazky [Xinvis, Yinvis].Top:=Zhora;
Obrazky [Xinvis, Yinvis].left:=Zlava;
CheckWin;
end;

////////////////////////////////////////////////////////////////////////////////////////
//                             POSUNY - VLAKNA                                        //
////////////////////////////////////////////////////////////////////////////////////////


procedure TPosunToRightThread.Execute;
var StartAnimationPosition:integer;
begin
 FreeOnTerminate := True;
 StartAnimationPosition:=Obrazky [Xclicked,Yclicked].Left;
    for StartAnimationPosition:=StartAnimationPosition To obrazky[Xinvis,Yinvis].left do begin
       if (StartAnimationPosition mod 4)=0 then Obrazky [Xclicked,Yclicked].Left:=StartAnimationPosition;
       synchronize (hra.vykresli);
    end;
    Done := True;
end;

procedure Thra.vykresli;
begin
sleep (1);
end;

_________________
MB: Gigabyte GA MA790X, CPU: AMD Phenom II X3 720@ 3.5Ghz, VGA: Gibayte GTX275UD-896I, PSU: CoolerMaster M620, HDD:WesternDigital 6400AAKS, CPU chladic:CoolerMaster Hyper 212, CASE: CoolerMaster Elite 330, 2xAiren RedWings ThermoControl
Zobraziť informácie o autoroviOdoslať súkromnú správu
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