Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Autor | Správa |
---|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
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...
|
|
Registrovaný: 11.01.09 Prihlásený: 23.11.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
TheK.SVK píše: 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.
|
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
No jasne, chapem, velka vdaka
|
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
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 |
|
Registrovaný: 02.09.05 Prihlásený: 17.11.10 Príspevky: 154 Témy: 1 | 1 |
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) |
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
programator píše: 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 |
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
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 |
|
Registrovaný: 11.01.09 Prihlásený: 23.11.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
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.
|
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
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 |
|
Registrovaný: 11.01.09 Prihlásený: 23.11.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
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).
|
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
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 |
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
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 |
|
Registrovaný: 11.01.09 Prihlásený: 23.11.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
TheK.SVK píše: 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) ?
|
|
Registrovaný: 07.08.09 Prihlásený: 08.12.09 Príspevky: 17 Témy: 3 | 3 |
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 |
|
Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Delphi, Visual Basic | 3 | 1148 | 11.05.2008 12:02 p360t | | v PHP, ASP | 20 | 1445 | 29.02.2008 20:24 stenley | | v Assembler, C, C++, Pascal, Java | 2 | 470 | 12.01.2018 14:33 camarovk19 | | v Assembler, C, C++, Pascal, Java | 3 | 582 | 02.12.2011 21:36 matwej | | v PHP, ASP | 1 | 534 | 29.04.2010 17:32 stenley | | v PHP, ASP | 3 | 330 | 18.02.2013 7:20 DeiForm | | v PHP, ASP | 1 | 646 | 26.10.2009 21:44 rooobertek | | v PHP, ASP | 1 | 889 | 02.06.2009 11:02 walther | | v PHP, ASP | 7 | 2503 | 30.03.2015 12:59 majky358 | | v Delphi, Visual Basic | 0 | 563 | 30.03.2014 1:56 F3RY | | v PHP, ASP | 2 | 406 | 07.11.2011 20:32 walther | | v PHP, ASP | 4 | 584 | 11.09.2010 15:44 chrono | | [ Choď na stránku: 1, 2 ] v PHP, ASP | 41 | 3026 | 28.11.2009 16:01 Tominator | | v PHP, ASP | 6 | 592 | 03.03.2011 14:52 janik366 | | v PHP, ASP | 8 | 606 | 01.04.2008 17:06 vl4kn0 | | [ Choď na stránku: 1, 2 ] v PHP, ASP | 32 | 2424 | 24.05.2008 15:04 Tominator |
|