Grafika Delphi alatt
2003-04-02T08:24:25+02:00
2003-04-16T08:40:13+02:00
2022-07-27T19:42:54+02:00
  • Sziasztok!

    Először is szeretném megköszönni az összes Tőletek kapott segítséget!
    Köszönöm!

    Elkészült a szakdolgozatom. Aki kíváncsi rá, az innen tudja letölteni.

    Kíváncsi lennék a véleményekre!
    Mutasd a teljes hozzászólást!
  • Hali!

    Ezzel a megoldással az a baj, hogy így programozott módon sem tudod bezárni az alkalmazást. Valami olyan megoldást is be kell építeni a proggiba, hogy ha a - tényleges - bezár gombot (vagy akármit) nyomja meg a júzer, akkor ezt figyelni kell a form FormCloseQuery esemény-kezelőjében, és akkor a CanClose-t igazra állítani (célszerű egy logikai változót használni, aminek alapból hamis az értéke, csak akkor lesz igaz, ha a bezár gombot nyomja meg, és ezt az értéket kell a CanClose-nak adni).
    Mutasd a teljes hozzászólást!
  • azt hogyan lehet élérni, hogy az Alt+F4 billentyűkombinációra ne záródjon be a programom?

    Ez viszonylag könnyű. Van egy olyan esemény OnCloseQuery ott beállítod hogy nem zárja be.

    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := False; end;
    Mutasd a teljes hozzászólást!
  • Itt találsz.
    Újabban nem jön be a lap, de a Delphi.lap.hu-n is van egy link ise(Cafe Delphi)
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Hála segítségeteknek, nagyon szépen haladok a cél felé...

    ...azonban lenne még egy-két problémám:

    -hogyan tudom lekérdezni programom indításakor a beállított színmélységet (ez azért kéne, hogy amikor kilépek a programból, vissza tudjam állítani)?

    -hol lehet azt beállítani, hogy a program futása közben ne lehessen Alt-Tab, Ctlr-Esc, Alt-Space billentyűkombinációkat hsználni?

    -azt hogyan lehet élérni, hogy az Alt+F4 billentyűkombinációra ne záródjon be a programom?
    Mutasd a teljes hozzászólást!
  • Hello!

    Lenne egy egyszeru feladat, amiszamomra megsem olyan egyszeru.

    Ime: Egy kockat (barmit) el kellene forgatnom egy tetszoleges (2pontjaval adott) tengely korul.

    Valamint egy masik:
    Adott egy kocka (barmi) e korul kellene egy gombfeluleten forgatnom egy kamerat ami az origoba mutat.

    Szoval ennyi. Ha valaki tud segiteni elore is koszonom. Varok 4x4 matrixokat stb...

    Thx. dUlo
    Mutasd a teljes hozzászólást!
  • És ha megvolt a rajzolás, akkor pl a következőképp tudod az egészet kirakni a form-ra:


    ... Form1.Canvas.Draw(0,0,buff); ...


    vagy


    ... Form1.Canvas.CopyRect( rect(0,0,640,480), buff.canvas, rect(0,0,640,480)); ...


    Jedi
    Mutasd a teljes hozzászólást!
  • Hali!

    Például így lehet felbontást váltani:

    procedure SetResolution(width,height: integer); var MyMode: TDeviceModeA; begin MyMode.dmSize:=Sizeof(MyMode); MyMode.dmFields:=DM_PELSWIDTH and DM_PELSWIDTH; MyMode.dmPelsWidth:=width; MyMode.dmPelsHeight:=height; ChangeDisplaySettings(MyMode, 0); end;

    Virtuális képernyőt pl lehet tBitmap-el nyomatni. Ez azért is célszerűbb, mert a canvas putpixele halál lassú, de a bitmap scanline-ait el tudod közvetlenül érni. Vmi ilyesmi lesz a kód:

    ... var buff: tBitmap; ...

    majd az inicializálása (pl a form.create-ben):

    ... buff:=tBitmap.Create; buff.width:=640; buff.height:=480; buff.pixelformat:=pf32bit; ...

    Így kapsz egy 32bit színmélységű bitmap-et. Hogy kényelmesen tudj rá rajzolgatni, ahhoz kell még egy kis trükk: egy vektort rácastolunk a scanline-okra:

    ... type tCol32 = record b,g,r,x: byte; end; tCol32Array = array[0..0] of tCol32; ...

    Ezutan ha ki akarsz rajzolni egy pixelt (szin: tCol32) valamely scanline-ra (x,y):

    ... tCol32Array(buff.scanline[y])[x] := szin; ...

    Ha csak 8bites módot használsz, akkor nem kell ez a saját vektor, mehet a beépített PByteArray-al is a castolás.
    1ébként ha megnézed a delphi help-jében a tBitmap-et ott asszem találsz egy konkrét példát is a Scanline-ok használatáról.

    Remélem segített ez a kis info.

    Jedi
    Mutasd a teljes hozzászólást!
  • Hali!

    A képernyőfelbontás állítására
    null
    itt egy példa.

    Vibrálásmentes animációt Delphi-ben is lehet az általad, Pascal-ban használt módszerhez hasonlóan készíteni. Például, ugyanúgy két form-ot használsz, és váltogatva, hol az egyik látható (ekkor a másikra rajzolsz), hol a másik látható. Esetleg, próbálkozhatsz még a TCanvas CopyRect metódusával is.
    Mutasd a teljes hozzászólást!
  • reluxa: köszi, erre gondoltam!
    A 3D-2D leképezés megvan, nem olyan bonyolult, csak a logikára kellett rájönni.
    Arra lennék még kíváncsi, hogy ennek a bizonyos nagy fekete képernyőnek lehet-e állítani a felbontásán (Pl. 640x480-ra)?
    Ha igen, akkor hogyan?
    Még egy kérdés: Pascalban lehet olyat csinálni, hogy van egy aktiv oldal, amire épp rajzolsz, és egy másik, amit éppen látsz. A "vibrálás" csökkentése érdekében úgy szoktam csinálni, hogy az aktívra megrajzolom, ami kell, majd kicserélem a láthatóra...
    Ezt meg lehet valahogy valósítani Delphiben?

    Mutasd a teljes hozzászólást!
  • hy!

    Elvileg van letezik Directx, es Opengl is delphi ala. En meg nem nezegettem, de itt is van forum rola a prog.hu-n.

    De ha szakdolgozatrol van szo, valoszinu sok pluszpontot (es nagyon sok fejtorest) fog jelenteni neked hogyha magad csinalod a 3d-2d lekepezest. Ha ez a resz mar megvan pascalban, akkor konnyu dolgod lesz.

    Kerdesedre valaszolva nagy fekete kepernyot a kovetkezo keppen kapsz:

    form1.Color:= clblack; form1.Width:= screen.Width; form1.Height:=screen.Height; form1.Top:= 0; form1.Left:= 0; form1.BorderStyle:= bsnone;

    Ha ezeket a tulajdonsagokat beallitod, akkor, jo lesz, mehet akar a form.create eventjebe is.

    Rajzolni a form.canvas -en keresztul tudsz. Nezd meg a helpet arra vonatkozoan, hogy milyen eszkozok vannak. putpixel, lineto asszem van.

    Minden jot.

    Ui:Ha gyors mozgasokat kell igy csinalnod, akkor az valoszinu "vibralni" fog.
    Mutasd a teljes hozzászólást!
  • Sziasztok!
    Szakdolgozatot kellene írnom, ami egy 3D-s tetris lenne, ahol az építőelemek a nézőponttól távolodnak. Az alapokat már Pascalban megcsináltam, csak Windows-os környezetben megírt programot kéne beadni.

    Abban szeretném segítségeteket kérni, hogy Delphiben hogyan lehet grafikát kezelni?
    Lehet-e benne DirectDraw-t, esetleg OpenGL-t kezelni?
    Hogyan kell inicializálni őket?

    Ha nincs ilyen lehetőség, akkor hogyan tudok egy teljesen sötét, fekete képernyőre rajzolni?
    Delphiben van a Pascal-os SetActivPage / SetVisualPage utasitásoknak megfelelő parancs?

    Kérlek segítsetek!
    Köszi!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd