Lazarus 2.2.0 RC1 (2021.02.21.)
Letöltés

  • Oldal:
  • 1
  • 2
  • 3

TÉMA:

Egy kezdő Lazarus használó kérdései 2015 dec. 05 18:13 #1654

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 54
  • Köszönetek: 1
Köszi a gyors segítségért. Amúgy a változókat jó helyre írtam? Úgy értem az implementation rész után kell ezeket a globális változókat tenni, amik nem az alprogramokéi?

Egy kezdő Lazarus használó kérdései 2015 dec. 05 17:50 #1653

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 472
  • Köszönetek: 80
Először is a "gombok" változó nincs deklarálva (megjegyzésben van).
Másodszor az "in" csak "set" típusú változókon alkalmazható, melyek tartalmai karakterláncok nem, csak ordinal (egész szám) típusúak lehetnek. Amikor az IntToStr függvényt használod karakterláncot hozol létre és azt próbálod keresni a készletben (set).

if (inttostr(key) not in gombok) then

Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 2.3.0 -- FPC 3.3.1-- GNU/Linux 5.4.0 x86_64
Megköszönték: Tomi

Egy kezdő Lazarus használó kérdései 2015 dec. 05 15:24 #1651

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 54
  • Köszönetek: 1
És ezzel a kódommal mi lehet a baj? Azt szeretném vele csinálni, hogy a lenyomott billentyűk kódjait mentse el egy halmazba, ugyanakkor törölje onnan a felengedettek kódjait. Tehát maradjon benne, míg fel nem engedjük az adott gombot. Íme a kód:
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TFoAblak }
 
  TFoAblak = class(TForm)
    Kiiro: TStaticText;
    Gombkiiro: TStaticText;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  FoAblak: TFoAblak;
 
implementation
 
{$R *.lfm}
 {var gombok: set of char;
   gombhalmdb: byte;
 
 gombok:=[];
 gombhalmdb:=0;
 
 gombkiiro.caption:='';}
{ TFoAblak }
 
procedure TFoAblak.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var gkszov: string;
    i: byte;
begin
  Kiiro.caption:='Lenyomva: '+inttostr(key);
  if (inttostr(key) not in gombok) then
  begin
    include(gombok,inttostr(key));
    inc(gombhalmdb);
    for i:=0 to gombhalmdb do
        Gombkiiro.Caption:=Gombkiiro.Caption+gombok[i]+',';
  end;
end;
 
 
procedure TFoAblak.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState
  );
var gkszov: string;
    i: byte;
begin
  Kiiro.caption:='Felengedve: '+inttostr(key);
  if (inttostr(key) in gombok) then
  begin
    exclude(gombok,inttostr(key));
    dec(gombhalmdb);
    if (gombhalmdb>0) then
    begin
      for i:=0 to gombhalmdb do
        Gombkiiro.Caption:=Gombkiiro.Caption+gombok[i]+',';
    end;
  end;
end;
 
end.
A 46. sornál (if (inttostr(key) not in gombok) then ) nem tetszik neki valami, mert azt a hibaüzenetet kapom, hogy: ")" expected but "not" found .

Egy kezdő Lazarus használó kérdései 2015 dec. 04 15:53 #1646

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 54
  • Köszönetek: 1
Köszönöm ezeket az infókat is; az imént néztem el az ajánlott SDL-es honlapra és nagyon biztatónak tűnik.

Egy kezdő Lazarus használó kérdései 2015 dec. 03 20:35 #1636

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 472
  • Köszönetek: 80
Ilyen játékok készítéséhez inkább a Simple DirectMedia Layer (röviden SDL) használatát javaslom az ablakos alkalmazásokhoz tervezett grafikus felület helyett.
A pascal unit-ok és példák megtalálhatók a Free Pascal könyvtáraiban. További hasznos információkat találhatsz a Free Pascal wiki "FPC and SDL" című írásában és a " Free Pascal meets SDL " oldalon.
A szükséges binárisokat (windows-on sdl*.dll fájlokat) a libsdl.org -ról lehet beszerezni, Unix/Linux rendszereken általában előre telepítve vannak (sdl*.so).
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 2.3.0 -- FPC 3.3.1-- GNU/Linux 5.4.0 x86_64
Megköszönték: Tomi

Egy kezdő Lazarus használó kérdései 2015 dec. 03 15:59 #1635

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 54
  • Köszönetek: 1
Szia, Gábor!
Köszönöm az alapos válaszodat; kipróbáltam és most már jól működik :laugh: (Ez az OnPaint valami ciklikusan ismétlődő rajzolóesemény-féle lenne, ami alatt folyamatosan frissül az ablak tartalma?)
Még egy kérdés hirtelenjében: tudsz/tudtok valami megoldást arra, hogy egyszerre tudjon két játékos billentyűzettel mozgatni két objektumot a játékban? Mert ott van ugyan az esemény a Lazarusban a gomblenyomásra és felengedésre, de nem tudom azt megcsinálni, hogy egyszerre képes legyen a program kezelni két különböző gombot. Úgy néz ki az egész, hogy van két labda a játék ablakában, és egyik felhasználó a nyíl gombokkal, másik a WASD gombokkal tudja irányítani a saját labdaobjektumát - de csak akkor, ha a másik játékos éppen nem nyom le semmilyen gombot. De úgy lenne jó, ha egyszerre tudnák. Megoldható ez alapvető Lazarus utasításokkal, vagy esetleg valami Assembly-kód is kellene hozzá, mert olyan alacsony szinten megy csak?

Egy kezdő Lazarus használó kérdései 2015 dec. 03 12:49 #1631

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 472
  • Köszönetek: 80
A Lazarus menüjében találsz egy eszközt, amely a Lazarus telepítésével együtt a gépeden elhelyezett példaprogramokat és bemutatókat sorolja fel: "Eszközök / Példa projektek ..."

Tehát a program hibátlanul elindul, csak éppen nem látszik semmi háttérképe az ablaknak.

A kép kirajzolását az .OnPaint eseménykezelőbe tedd!
A kép a te kódoddal is ki van (illetve volt) rajzolva az ablakban annak létrehozásakor, de amikor a program futása közben (a OnCreate után) eljön a megfelelő idő a rajzolásra a programod teszi a dolgát (megfelelően) és megrajzolja a saját hátterét, így felülírva az általad korábban (rosszkor) kirajzolt képet.

milyen utasítások használhatók a Lazarusban? A Pascalé vagy a Delphié?

A Lazarus egy fejlesztőkörnyezet, mely elsősorban a FreePascal-hoz készült., így annak minden képessége kihasználható. Ezt egészítik ki a grafikus felületek fejlesztése esetén szükséges dolgokkal (GUI komponensek). A Pascal és ObjectPascal több dialektusában írhatsz programokat (TP,FPC,OBJFPC,DELPHI,GPC, és a többi), melyek mindegyikével használható az összes telepített unit és komponens, melyek a legkülönbözőbb témákban lehetnek a fejlesztők hasznára. Természetesen minden attól függ, hogy hol és mire akarod használni a végeredményt. Mivel a Free Pascal és a Lazarus is úgy van tervezve, hogy a legkülönbözőbb rendszereken is lehetőleg ugyanazt az eredményt adja a végfelhasználók számára, ezért az alapvető dolgok szintjén teljesen megegyezőnek veheted a csak DOS/Windows környezetben működő hasonló szoftverekkel. Bizonyos speciális esetekben lehetnek eltérések.
Az ismerkedéshez elkezdéséhez ajánlom a FreePascal/Lazarus wiki magyar nyelvű Dokumentáció és GY.I.K oldalát.

ITT nézegetem éppen a graphics unit függvényeit, de nem találom a Draw vagy PutPixel, illetve megfelelőiket.

Nem jó helyen nézed, A Graphics és a Graph unit nem ugyanaz (Delphi-ben sem). Amit nézni szeretnél az a Graph unitban is megtalálható, de ablakos alkalmazásokhoz komponensek .Canvas elemének leírásaiban találsz infókat. A saját példádban is használtad a Canvas.Draw-ot...

megpróbáljak képpontokat kirajzolni az egérgombnyomás helyére, de nem sikerült, valami hiba történt

Egy képpont az egér lenyomás helyére az OnMouseDown eseménykezelőben is tehető értéket adva az adott képpontnak: Canvas.Pixels[X,Y]. Az egér mozgását követő vonal rajzolásához az OnMouseDown, OnMouseMove és az OnMouseUp használata szükséges.

Fontos: A Lazarus-ban van beépített súgó, mely az F1 lenyomásával vagy a menüből érhető el. Egy azonosítóra állítva a beszúrási jelet (karet) az adott elemhez tartozó információk jelennek meg.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 2.3.0 -- FPC 3.3.1-- GNU/Linux 5.4.0 x86_64
Megköszönték: Tomi

Egy kezdő Lazarus használó kérdései 2015 dec. 03 10:19 #1629

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 54
  • Köszönetek: 1
Sziasztok!
Én perpillanat egy teljesen kezdő Lazarus felhasználó vagyok, aki annakidején a jó öreg DOS-os Turbo Pascal 7-tel kezdte a programozással való ismerkedést. A Lazarusra nemrég találtam rá, és elég jónak találom, bár szokatlan még nekem a felülete és használata, mivel eddig olyan fejlesztőeszközöket használtam, amelyeknél egy üres szerkesztőablakba kellett az egész kódot begépelni.
Mint eddig is a többivel, a Lazarussal is elsősorban játékprogramokat szeretnék készíteni. Első próbálkozásom vele az volt, hogy egy pattogó labdát kellett a játékosnak egérkattintással eltalálni, tehát kb. ilyen szinten vagyok vele. Közben persze bújom a világhálót leírások és példaprogramok után kutatva, de még így is vannak olyan dolgok, amelyek nem világosak számomra, ezért is örülök, hogy rátaláltam erre a magyar nyelvű fórumra. :)
Hogy a közepébe vágjak, nem tudom, hogy a következő kódommal mi lehet a baj, mert nem jeleníti meg az ablakban a háttérképet (természetesen az OnCreate esemény tartalmazza):
procedure TFoAblak.FormCreate(Sender: TObject);
var kep: tbitmap;
begin
  kep := TBitmap.Create;
  kep.LoadFromFile('e:\kepem.bmp');
  Canvas.Draw(0, 0, kep);
  kep.Free;
end;
Tehát a program hibátlanul elindul, csak éppen nem látszik semmi háttérképe az ablaknak.
A másik kérdésem az lenne, hogy tkp. milyen utasítások használhatók a Lazarusban? A Pascalé vagy a Delphié? Tudom, rokon nyelvek, de azért lehetnek bizonyos különbségek, mert próbáltam a TP-ból átvenni a PutPixel() utasítást bele, hogy megpróbáljak képpontokat kirajzolni az egérgombnyomás helyére, de nem sikerült, valami hiba történt.
( ITT nézegetem éppen a graphics unit függvényeit, de nem találom a Draw vagy PutPixel, illetve megfelelőiket.)
Elnézést, ha kicsit sokat írtam, úgyhogy zárom is most soraimat. Bizonyára lesznek még kérdéseim, és azokhoz illetve a fentiekhez előre is köszönöm a segítő válaszaitokat.

  • Oldal:
  • 1
  • 2
  • 3