Lazarus 2.0.12 (2020.02.21.)
Letöltés

  • Oldal:
  • 1
  • 2

TÉMA:

Egy kezdő Lazarus használó kérdései 2016 febr. 23 08:56 #1865

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
Már megoldottam.


Sziasztok.

Egy kis segítségre lenne szükségem.

Az alábbi hiba üzenet jelenik meg : external sigsegv amikor lefordítom vagy ha futtatom az exe-t.

Van egy Form1 -em ami indításkor elvan rejtve és a formcreate eseményénél van egy form2.visible := true;

Tudnátok egy kis segítséget adni hogy hogyan kellene meg valósítanom hogy ne kapjak hiba üzenetet.

Egy kezdő Lazarus használó kérdései 2016 febr. 19 14:58 #1852

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
Köszönöm a segítséget megoldottam.
procedure TForm1.Button1Click(Sender: TObject);
var
   Http: TFPHTTPClient;
begin
  Http := TFPHTTPClient.Create(nil);
 
  try
     Memo1.Text:= Http.Get('http://webcim.hu/teszt.txt');
  finally
    Http.Free;
  end;
 
end;

Egy kezdő Lazarus használó kérdései 2016 febr. 19 14:42 #1851

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0

Csak úgy megjegyzés: egy weblap az nem egy fájl...


Nem weblapot hanem a szerveren elhelyezett szöveges fájt szeretném letölteni.

Egy kezdő Lazarus használó kérdései 2016 febr. 19 14:34 #1850

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
A TFPHttpClient.Get() a megcélzott fájl tartalmát adja vissza (karakterláncként), ami az előbbi példakódban az S változóba kerül, amint azt te is láthatod. Az így kapott karakterlánccal azt teszel amit csak akarsz, az S helyett akár egy TMemo.Text-ben is elhelyezheted.
A kapott karakterlánc azonnali fájlba írásához a .Get() metódus egy másik változatát használd:
C.Get(ParamStr(1), 'HelyiFajlNeve');

Egy fájlt szeretnék letölteni egy webszerverről

Csak úgy megjegyzés: egy weblap az nem egy fájl...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

Egy kezdő Lazarus használó kérdései 2016 febr. 19 14:03 #1849

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
Nem feltétlenül szükséges a komponens ha van alapból akkor nekem az is jó.
Esetleg ehhez a kód hoz ha tudnál nekem még egy kis segítség adni azt meg köszönném.
Hogy hogy tudnám ezt a kódot grafikus módból használni és nem parancssorból.

És nem láttam a kódban hogy hol lehet meg adni a mentési nevet és útvonalat.

Egy kezdő Lazarus használó kérdései 2016 febr. 19 13:45 #1848

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Amennyiben mindenképpen komponensek használatával szeretnéd megvalósítani a dolgot: Indy, LNet, Synapse, de az FPC tartalmaz a HTTP protokolhoz (is) unito=kat, például: fphttpclient , fphttpserver, httpdefs
A következő egy minimalista példaprogram (hibakezelés nélkül), melyet fordítás után a parancssorból futtathatsz:
{$MODE OBJFPC}{$H+}
uses fphttpclient,sysutils;
var
	C:TFPHttpClient;
	S:string;
begin
	C:=TFPHttpClient.Create(Nil);
	WriteLn('Webcím: ',ParamStr(1));
	C.AddHeader('User-Agent','Mozilla/5.0 (compatible; fpweb)');
	S:=C.Get(ParamStr(1));
	for I:=0 to C.ResponseHeaders.Count-1 do Writeln(C.ResponseHeaders[I]);
	if S<>'' then Writeln(S);
	C.Free;
end.
Paraméterként a megcélzott webcímet kell megadni.
Érdemes lehet alaposabban körülnézni a wiki Networking kategóriájában.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

Egy kezdő Lazarus használó kérdései 2016 febr. 19 10:22 #1847

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
Sziasztok

Egy kis segítségre lenne szükségem.

Egy fájlt szeretnék letölteni egy webszerverről és nem igazán találtam hogy hogyan kellene megvalósítani.
Esetleg van valami komponens a lazarus -ban?
És ha esetleg tudnátok nekem valami minta kódot adni azt megköszönném.

Egy kezdő Lazarus használó kérdései 2016 jan. 06 11:42 #1752

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
Köszönöm a segítséget de valamiért nem megy de még próbálkozom.

Egy kezdő Lazarus használó kérdései 2016 jan. 06 10:39 #1751

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Ha volt a Lazarus telepítése előtt FPC telepítve a gépedre és az a PATH környezeti változóban szereplő könyvtárak egyikében található akkor az (is) okozhat gondot. Ha nem akkor telepítsd újra a Lazarus-t.
Korábban kijavítottam a telepítés mikéntjére vonatkozó tanácsomat (ahogy látom valószínűleg egyszerre gépeltünk akkor), de email-ben csak az eredetit kaptad meg. (Lásd lentebb) A javított változat alapján telepítsd a Lazarus-t.
:( Sorry...

Ha gondolod újratelepítés előtt a Lazarus beállítási fájljait is törölheted a "c:/users/felhasználó/Local Settings/Application Data/lazarus/" könyvtárból (vagy valami hasonló, nincs előttem win), hogy biztosan kiszűrd a hibákat.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64
Megköszönték: mikiR2

Egy kezdő Lazarus használó kérdései 2016 jan. 06 10:05 #1750

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
Beállítottam a leírás alapján.


és amikor az OK -ra kattintok az alábbi üzenet jelenik meg.


Az OK -ra kattintottan.

És amikor leszeretném fordítottan az alábbi hiba üzenetet kapom.

Mellékletek:

Egy kezdő Lazarus használó kérdései 2016 jan. 06 09:34 #1749

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
A menüből indulva: "Projekt / Projekt beállításai" aztán a megjelenő ablakban: "Fordító beállításai / Beállítás és cél / Cél platform / Cél OS" és kiválasztod a win32-t.
Ez a beállítás projektfüggő, tehát minden olyan projektnél el kell végezni, amelyiknek a célja eltér az FPC/Lazarus aktuális futási környezetétől...

Az itt található legördülő listák minden elképzelhető, de a gépeden (követelmények hiányában) nem feltétlenül sikeresen megcélozható lehetőséget tartalmaznak.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

Egy kezdő Lazarus használó kérdései 2016 jan. 06 09:14 #1748

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
3.0.0 sorozatú FPC-t használók az is instabil?

Feltelepíttetem a 32 bitest majd a 64 bitest de hol tudnám kiválasztani hogy melyikre forduljon?

Egy kezdő Lazarus használó kérdései 2016 jan. 06 08:54 #1747

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Szükség van a cél-rendszernek megfelelő unit-okra is a keresztfordításhoz (ez esetedben a win32 RTL, FCL, LCL összetevőket jelenti, más rendszerek esetén még sok más dolgot is).
Legegyszerűbb ha először a 32-bites Lazarus-t telepíted és csak az után a 64-bitest.
A telepítő mellett ot van a windows változatokra történő keresztfordításhoz szükséges kiegészítő állományok telepítője is...

Ha a 2.6 sorozatú FPC-vel működő változatot telepítesz akkor tudnod kell, hogy a 64-bites használatát windows-on nem javasolják a fejlesztők, mert azokban a SEH kivételek még nincsenek kezelve és az elkészített alkalmazások instabilak lehetnek.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

Egy kezdő Lazarus használó kérdései 2016 jan. 06 07:49 #1745

  • mikiR2
  • mikiR2 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 9
  • Köszönetek: 0
Sziasztok most használom először a lazarus-t.
Telepítettem a lazarus 64-bites verzióját windows 8.1 re.

És az lenne a problémám hogy a 64 bites verzióval nem sikerült lefordítani 32 bitesre.

A 64 bites verzióval lehet fordítani 32 bitesre?
És ha igen akkor tudnátok segíteni?

Egy kezdő Lazarus használó kérdései 2015 dec. 31 14:37 #1739

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Köszönjük, hogy megosztottad velünk a munkád gyümölcsét.
Néhány futó pillantást vetettem a forráskódra és van néhány építő jellegű javaslatom arra az esetre ha nem csak windows-on, hanem más rendszereken is szeretnéd használhatóvá/lefordíthatóvá tenni a programod:
  • Próbáld ki és használd az FPSound (vagy a PlaySoundPackage ) csomagot a hangok lejátszásához. A legtöbb esetben működni fog az alapértelmezés szerint telepített rendszerösszetevőkkel.
  • Könyvtárelválasztóként ne a \ jelet hanem a DirectorySeparator állandót használd, mely a forráskód lefordításakor minden rendszerhez a megfelelő könyvtárelválasztó jelet tartalmazza. A Unix típusú rendszereken (Linux, BSD, MacOS stb.) csak a / jel használható e célra.
  • Az ablak átméretezésekor nem kívánatos dolgok történnek. A játékteret (amit most a főablakban közvetlenül jelenítesz meg) egy közbeiktatott, állandó méretű képpel (és játéktérrel) oldd meg. Ezt aztán a StretchDraw() használatával egy az egyben átméretezve rajzolhatsz ki a főablakra... vagy ne engedd meg a főablak átméretezését, ennek egyik módja ha a .Constraints értékeit beállítod és a .BorderStyle pedig legyen például bsSingle vagy bsDialog
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

Egy kezdő Lazarus használó kérdései 2015 dec. 31 13:10 #1738

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
Sziasztok! Végre elkészült első (és remélhetőleg nem utolsó) játékprogramom a Lazarus-szal! :laugh: A címe: Space Defender.
Innen tölthetitek le: LETÖLTÉS
Sajnos van egy-két bug benne, amit ezidáig nem tudtam megoldani, úgyhogy ha valaki ezek megoldásában segíteni tudna, annak nagyon örülnék. A fő hiba az, hogy az ellenségek lövései néha rossz helyen jelennek meg, pedig én az ellenséges űrhajóobjektumok aktuális koordinátáira hozom őket létre, de mégis máshol bukkannak fel. A többi hiba leírását lásd a fenti letöltési oldalon.
Végül, ezúton szeretnék Gábornak köszönetet mondani a segítségeiért, amit a Lazarus-szal való ismerkedésem során nyújtott (a jóisten tartsa meg ezen szokását :) ), és Boldog Új Évet kívánni mindenkinek! :cheer:

Egy kezdő Lazarus használó kérdései 2015 dec. 24 09:33 #1732

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
Köszönöm a választ; a ClientWidth elé FoAblak-ot írva a TFoAblak helyett most már működik! Csak azt hittem, hogy a ClientWidth, Caption és társaik olyan globális változók, amelyek mindig és mindenhol elérhetőek.
De a lényeg az, hogy most már jó. :)
És ezúton szeretnék Neked és a Lazarus Magyarország honlap közösségének boldog karácsonyt kívánni!

Egy kezdő Lazarus használó kérdései 2015 dec. 23 19:00 #1731

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Egy osztály(!) elemeit csak az adott osztály (vagy leszármazottainak) metódusaiból lehet (osztálynév előtaggal vagy a nélkül) elérni:
type
	TOsztalyTipus=class(TObject)
		Szam:Integer;
		procedure SajatValami;
	end;
 
procedure TOsztalyTipus.SajatValami;
begin
	Szam:=0;
end;
Egy (bármilyen) osztály típusú változó(!) elemeit bárhonnan elérheted, ha változónév előtaggal hivatkozol rájuk:
var
	Valtozo:TOsztalyTipus;
 
procedure KulsoValami;
begin
	Valtozo.Szam := 0;
end;
... de soha nem fog működni a következő:
type
	TOsztalyTipus=class(TObject)
		Szam:Integer;
	end;
 
procedure KulsoValami;
begin
	TOsztalyTipus.Szam := 0;
end;
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64
Megköszönték: Tomi

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

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
És az miért van, hogy írtam egy saját eljárást (procedure), amit annak rendje s módja szerint előre deklaráltam az interface részben, majd kidolgoztam az implementation részben a többi fölött, működik is, de olyan változókat nem tudok benne elérni, mint pl. a ClientWidth, vagy éppen a TFoAblak.Caption, mert ha ezeket használnám, akkor a következő hibaüzenetet kapom:
unit1.pas(62,5) Error: Only class methods, class properties and class variables can be referred with class references

Egy kezdő Lazarus használó kérdései 2015 dec. 21 17:48 #1729

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Ez a hibaüzenet arra a sorra vonatkozik ahol a deklaráció van, hiszen az nincs kidolgozva később.
Valószínűleg nem jó a kidolgozás fejléce, például lefelejtetted a kidolgozásnál az osztály-előtagot, esetleg procedure helyett function van vagy ilyesmi...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64
Megköszönték: Tomi

Egy kezdő Lazarus használó kérdései 2015 dec. 21 17:37 #1728

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
És ezt a hibaüzenetet miért kapom?
unit1.pas(20,15) Error: Forward declaration not solved "TFoAblak.ellensegkirakas;"
Hiszen ezt a saját eljárást ("ellensegkirakas") éppen abban a sorban deklarálom előzetesen, és aztán az implementation rész után részletesen megadom.
Akkor most rossz helyre írok valamit, vagy kihagytam valamit?

Egy kezdő Lazarus használó kérdései 2015 dec. 21 14:47 #1727

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
Köszi, már értem! Betettem a rajzolást az időzítéshez, és így már működik. Így viszont a Form-on TImage-ként eleve elhelyezett kép nem látszik, csak az elmozdulásakor, de ezt már meg tudom oldani, hogy akkor ezt is futásidőben rakom ki.

Egy kezdő Lazarus használó kérdései 2015 dec. 20 16:39 #1726

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Az eseménykezelő eljárások csak és kizárólag valamely esemény bekövetkeztekor vagy "kényszer" hatására futnak le.

Az OnPaint eseménykezelő például akkor fut ha szükség van az adott elem kirajzolására vagy a programozó ezt közvetve vagy közvetlenül kéri: bizonyos műveletek következményeként a Paint metódus meghívásra kerül, ami az OnPaint eseménykezelő futását is előidézi.
A folyamatos frissítést csak időzítővel vagy valamilyen más ismétlődő ciklus (for/repeat) használatával érheted el (ez utóbbi módszert GUI alkalmazásokban nem javaslom).

Minden kirajzolást ugyanabban az időzített eljárásban végezz el. Természetesen az időzítést úgy kell beállítanod, hogy elég időt hagyj a rajzolási és számolási műveletek számára...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

Egy kezdő Lazarus használó kérdései 2015 dec. 20 14:05 #1725

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
A főablak, tehát a TMain-nak az OnPaint-eseményében a FormPaint használható a folyamatos kirajzoláshoz? Vagy ez mire jó? Mert ott íratom ki néhány változó értékét, de nem úgy tűnik, hogy folyamatosan frissülne az értékük...

Egy kezdő Lazarus használó kérdései 2015 dec. 16 14:54 #1722

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Canvas.Clear;
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64
Megköszönték: Tomi

Egy kezdő Lazarus használó kérdései 2015 dec. 16 14:39 #1721

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
Az újrarajzoltatáshoz beírtam, hogy:
FoAblak.Canvas.Refresh;
De nem történik rá semmi... :-/

Egy kezdő Lazarus használó kérdései 2015 dec. 16 14:02 #1720

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
Ahhoz hogy a képernyőről is eltűnjenek a labdák az képfrissítő eljárásban újra ki kell rajzoltatnod a teljes játékteret, tehát nem csak a labdákat hanem a hátteret is.
Az objektumok megsemmisítésére használhatod a FreeAndNil() eljárást:
mbRight:
    for i:=1 to labdadb-1 do  FreeAndNil(labdatomb[i]);
... és ne felejtsd el alapra állítani a labdadb értékét.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

Egy kezdő Lazarus használó kérdései 2015 dec. 16 10:54 #1719

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
Hogyan kell megsemmisíteni a létrehozott objektumo(ka)t? Most úgy csinálom, hogy egy tömbbe mentem az objektumazonosítót, majd ha nem kell, akkor a nil értéket adom neki - de valamiért nem jó, mert jobb egérkattintásra még mindig mutatja a labdákat, holott erre kéne eltűnnie az összesnek. Ha odaírom, hogy destroy vagy free, az sem jó neki. Itt a teljes kód:
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
 
type
 
  { TFoAblak }
 
  TFoAblak = class(TForm)
    KepFrissito: TTimer;
    //procedure FormClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure KepFrissitoTimer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
type TLabda=class(TObject)
  var xhely,yhely: integer;
  kepe: TBitmap;
  private
  public
    constructor letrehoz(xhelyitt,yhelyitt: integer; kepeitt: Tbitmap);
end;
 
var
  FoAblak: TFoAblak;
  labdakep: Tbitmap;
  egylabda: TLabda;
  labdadb: integer;
  labdatomb: array [1..100] of TLabda;
 
implementation
 
{$R *.lfm}
constructor TLabda.letrehoz(xhelyitt,yhelyitt: integer; kepeitt: Tbitmap);
begin
        xhely:=xhelyitt;
        yhely:=yhelyitt;
        kepe:=kepeitt;
end;
 
{ TFoAblak }
 
{procedure TFoAblak.FormClick(Sender: TObject);
var egerhely: TPoint;
begin
      egerhely:=FoAblak.ScreenToClient(mouse.cursorpos);
      egylabda:=TLabda.letrehoz(egerhely.x,egerhely.y,labdakep);
      FoAblak.Canvas.Draw(egylabda.xhely,egylabda.yhely,egylabda.kepe);
end;  }
 
procedure TFoAblak.FormCreate(Sender: TObject);
begin
  labdakep:=TBitmap.Create;
  labdakep.LoadFromFile('labdabmp.bmp');
  labdadb:=1;
end;
 
procedure TFoAblak.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i: integer;
begin
        case button of
          mbLeft:
        begin
          egylabda:=TLabda.letrehoz(x,y,labdakep);
          //FoAblak.Canvas.Draw(egylabda.xhely,egylabda.yhely,egylabda.kepe);
          labdatomb[labdadb]:=egylabda;
          inc(labdadb);
        end;
        mbRight:
        begin
             for i:=1 to labdadb-1 do
             begin
               labdatomb[i]:=nil;
             end;
             //labdadb:=1;
        end;
        end;
end;
 
procedure TFoAblak.KepFrissitoTimer(Sender: TObject);
var i: integer;
begin
for i:=1 to labdadb-1 do
begin
     if labdatomb[i]<>nil then
               FoAblak.Canvas.Draw(labdatomb[i].xhely,labdatomb[i].yhely,labdatomb[i].kepe);
end;
KepFrissito.Interval:=10;
end;
 
end.

Egy kezdő Lazarus használó kérdései 2015 dec. 14 16:17 #1711

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 48
  • Köszönetek: 1
Huhhh, végre sikerült! Köszönöm az újabb segítséget! :cheer:
Így sikerült megoldani:
procedure TFoAblak.FormClick(Sender: TObject);
var egerhely: TPoint;
begin
      egerhely:=FoAblak.ScreenToClient(mouse.cursorpos);
      egylabda:=TLabda.letrehoz(egerhely.x,egerhely.y,labdakep);
      FoAblak.Canvas.Draw(egylabda.xhely,egylabda.yhely,egylabda.kepe);
end;
Az az érdekes, hogy az egerhely változó közbeiktatása nélkül, tehát így:
egylabda:=TLabda.letrehoz(mouse.cursorpos.x,mouse.cursorpos.y,labdakep);
nem működött. Pedig mindenhol így olvastam, és nem tértek ki arra a kiegészítésre, amit írtál.

Egy kezdő Lazarus használó kérdései 2015 dec. 14 16:03 #1710

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 459
  • Köszönetek: 76
A CursorPos így érhető el: Mouse .CursosPos
Ez azonban az egérmutató képernyőn elfoglalt helyét tartalmazza, ezért át kell alakítanod az ablakhoz viszonyított koordinátára, pl így: Form1. ScreenToClient (Mouse.CursorPos);

A Mouse.CursorPos mindig az egérmutató pillanatnyi helyét tartalmazza, és nem a kattintás helyét. Az onClick esemény kezelője akkor kerül futtatásra ha a lenyomás és a felengedés is ugyanazon elem területén, de nem feltétlenül ugyanazon a ponton történik. A két esemény között (lenyomás és felengedés) az egérmutató ideiglenesen el is hagyhatja az elem területét, mint tudjuk.
Javaslom, hogy ez esetben az OnMouseDown eseménykezelőt használd
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- FPC 3.3.1 -- Lazarus 2.1.0 -- GNU/Linux 5.4.0 x86_64

  • Oldal:
  • 1
  • 2