Lazarus 3.6 (2024.09.30.)
Letöltés

  • Oldal:
  • 1
  • 2
  • 3

TÉMA:

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.
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Téma zárolva.

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.
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Téma zárolva.

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.
Téma zárolva.

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.
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: mikiR2
Téma zárolva.

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:
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Téma zárolva.

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?
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Téma zárolva.

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?
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Téma zárolva.

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: 82
  • 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:
Téma zárolva.

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: 82
  • 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!
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: Tomi
Téma zárolva.

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: 82
  • 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
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: Tomi
Téma zárolva.

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: 82
  • 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?
Téma zárolva.

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: 82
  • 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.
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Téma zárolva.

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: 82
  • 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...
Téma zárolva.

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: 507
  • Köszönetek: 86
Canvas.Clear;
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: Tomi
Téma zárolva.

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: 82
  • Köszönetek: 1
Az újrarajzoltatáshoz beírtam, hogy:
FoAblak.Canvas.Refresh;
De nem történik rá semmi... :-/
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Téma zárolva.

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: 82
  • 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.
Téma zárolva.

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: 82
  • 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.
Téma zárolva.

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: 507
  • Köszönetek: 86
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? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2015 dec. 14 15:19 #1709

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
Igen, a labda fájlneve bizonyult rossznak; köszönöm az észrevételedet. Nálad egyébként rendesen létrejön egérkattintás helyein a labda? Mert nekem csak akkor jelenik meg, ha konkrét számokat írok be a létrehozáshoz, dehát ekkor nem az egérmutatóhoz, hanem az adott koordinátákra.
Ha nem adom meg a mouse unit-ot, akkor nem csinál semmit a program (elindul, de hiába kattintgatok, labdák sehol), míg ha megadom, akkor ezek a hibaüzenetek jelennek meg:
Projekt fordítása, Cél: kepfutidoben.exe: Kilépési kód: 1, Hibák: 2
unit1.pas(50,39) Error: Identifier not found "Cursorpos"
unit1.pas(50,57) Error: Identifier not found "CursorPos"

Tehát nem ismeri a CursorPos nevű azonosítókat - de miért nem? :S
Téma zárolva.

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

  • JohnnyK
  • JohnnyK profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 78
  • Köszönetek: 16
A programkódod nálam működik. Akkor sikerült a hibaüzenetet előidéznem, amikor elgépeltem a bmp fájl nevét, vagy nem volt az exe futtatható állománnyal egy könyvtárban.
Szerencsésebb lehet esetleg teljes útvonalakat használni, pl 'c:\valami\ballbmp.bmp', vagy használni az exe mindenkori útvonalát pl SysToUTF8(ExtractFilePath(Application.ExeName)) + 'ballbmp.bmp', noha e nélkül is működik nálam jelen esetben.
Téma zárolva.
  • Oldal:
  • 1
  • 2
  • 3