Lazarus 3.6 (2024.09.30.)
Letöltés

  • Oldal:
  • 1
  • 2
  • 3

TÉMA:

Egy kezdő Lazarus használó kérdései 2022 máj. 02 12:40 #2578

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 507
  • Köszönetek: 86
Az emberi szem 25 felvillanást már folyamatos fénynek érzékel, ezért az időzítőt a tiédhez hasonló grafikák esetében ennél rövidebbre beállítani igazából nem nagyon érdemes (1000/25=40ms).

Az időzítő elvileg elegendő ahhoz, hogy a játék sebessége azonos legyen eltérő rendszereken, de természetesen az adott időközönként elvégzendő műveleteknek le kell tudni futni az időzítés intervallumánál hamarabb, ezért az időzített eljárásban a feladatokat mindig a legkevesebb művelettel kell elvégezni.
Továbbá a grafikához érdemes két vagy háromszoros pufferelést alkalmazni, tehát két-három képkockát előre megrajzolni a memóriában, minimum a statikus elemek szintjéig (pl. háttér, nem mozgó elemek, felíratok stb.)

Az időkülönbségek (delta idő) futás közbeni vizsgálata (pl. for, while, repeat ciklusokban) pontos időzítésre nem feltétlenül alkalmas. Hiszen ha egy adott rendszeren lassan halad a kód futása akkor az időkülönbségek viszgálatára is ritkábban kerül majd sor.

A kettő közti különbséget úgy tudnám érzékeltetni, hogy:
  • Időzítő eljárás - ha törik ha szakad a program futása azonos időközönként elterelve ide és csináljuk ezt
  • delta idő viszgálata - ha majd ideér a program futása és eltelt már az adott idő vagy annál több akkor csináljuk ezt
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 2022 ápr. 30 12:43 #2577

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
Igazad van, ezt jól benéztem!   Jár a válaszodért a köszönet, Gábor! 
Még egy kérdés a lazarusos játékfejlesztéssel kapcsolatban: az eddigi játékaimban (mondjuk ez nem sok) sosem kezeltem az ún. delta időt, és így nem tudom, hogy az enyémnél gyorsabb és lassabb rendszereken hogyan futnak azok. Lazarusban ugyebár időzítővel meg lehet oldani pl. a pályafrissítést, amit szoktam is mindig alkalmazni, tehát mondjuk:
palyafrissito:=TTimer.Create(nil);
  palyafrissito.interval:=10;
  palyafrissito.ontimer:=@palyafrissites;
A kérdés az, hogy mindez elegendő-e ahhoz, hogy a program azonos sebességgel fusson minden felhasználó számítógépén, vagy ezen kívül kell-e még ezt a delta időt is számolni? Ha igen, hogyan? És hogyan lehet ezzel befolyásolni pl. egy játékelem elmozdulását?
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2022 ápr. 27 09:34 #2576

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 507
  • Köszönetek: 86
Elindul az! Csak nagyon sokáig tart, amíg megcsinálja, amit kértél tőle.
A hiba ott van hogy kivonást és összeadást használsz osztás és szorzás helyett kirajzoláskor a for ciklusokban.
Helyesen így néz ki a dolog:
    for psz := 0 to palyakep.width div talajkep.width do
        for pm := 0 to palyakep.height div talajkep.height do
            palyakep.canvas.draw(psz * talajkep.width, pm * talajkep.height, talajkep);
Magyarázat: nem annyiszor akarjuk kirajzolni talajmintát amennyivel nagyobb a pálya szélessége a talajminta szélességénél és ezt ismételve annyiszor amennyivel nagyobb a pálya magassága a talajminta magasságánál, ráadásul minden képpontra kirajzolva, hanem csak annyiszor ahányszor a talajminta szélessége és magasága belefér a pálya szélességébe és magasságába a talajminta méretével léptetve a kirajzolás helyé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
Megköszönték: Tomi
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2022 ápr. 22 12:17 #2575

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
Sziasztok!
Elakadtam játékfejlesztés során a háttér megalkotásánál: szeretnék egy vagy több BMP vagy más formátumú képből összerakni egy nagy képet háttérnek, és azt kirajzoltatni, de nem tudom, hogy ezt hogyan kell, hogy mely parancs alkalmas erre.
Tehát van mondjuk a talajkep nevű BMP fájl, és azzal szeretném mintegy "kicsempézni" a pályát. Ezzel a kóddal próbálkoztam a főablak Create eseményében, de nem indul el vele a program, ezért kénytelen voltam kikommentelni a hibás részt belőle:
talajkep:=TBitmap.Create;
  talajkep.LoadFromFile('kepei/hatterek/talaj.bmp');
  palyakep:=TBitmap.Create;
  palyakep.SetSize(width*2,height*2);
  palyakepx:=0;
  palyakepy:=0;
  //for psz:=0 to palyakep.width-talajkep.width do
      //for pm:=0 to palyakep.height-talajkep.height do
          //palyakep.canvas.draw(psz+talajkep.width,pm+talajkep.height,talajkep);
Majd a FormPaint-ben:
canvas.draw(palyakepx,palyakepy,palyakep);
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 25 13:49 #2557

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
Úgy tűnik, végül sikerült megoldanom; legalábbis a Delete-tel való törlés során nem jelentkezik semmilyen hiba. Bár azt nem értem, hogy a Free miért nem volt jó neki és miért pont 4 vagy több elem megléte esetén akadékoskodott. 
Tehát a jó kódsor:
delete(epuletek,e,1);
           //epuletek[e].Free;
           //setlength(epuletek,epuletdb-1);
 epuletdb:=epuletdb-1;
 break;
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 24 14:59 #2556

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
Ismét egy nagy gond, amivel csak düllesztem a szemem, de a forrását nem találom: ha 4 vagy több darab épületem van és azokból próbálok lerombolni egyet az RTS játékomban, akkor SIGSEGV osztályú kivételt kapok egy rakás Assembly sorral. De 3 vagy kevesebbnél minden rendben. Gőzöm sincs, mi okozhatja ezt, de ha valaki netán felfedezné belőle, itt az épületrombolás kódja a munkásegységben:
for i:=0 to puffancsdb-1 do
  begin
   case puffancs.mitcsinal of
   'lebont': begin
      for e:=0 to epuletdb-1 do
      begin
       if (epuletek[e].xhely=puffancs.celx) and (epuletek[e].yhely=puffancs.cely) then
       begin
          if epuletek[e].epsege>0 then
          begin
             epuletek[e].epsege:=epuletek[e].epsege-1;
             Canvas.Pen.Color:=clRed;
             Canvas.Pen.Width:=2;
             Canvas.MoveTo(puffancs.xhely,puffancs.yhely);
             Canvas.LineTo(puffancs.celx,puffancs.cely);
          end
          else
          begin
           for p:=0 to puffancsdb-1 do
           begin
            if (puffancs[p].celx=epuletek[e].xhely) and (puffancs[p].cely=epuletek[e].yhely) then puffancs[p].mitcsinal:='semmit';
           end;
           epuletek[e].Free;
           setlength(epuletek,epuletdb-1);
           epuletdb:=epuletdb-1;
           break;
          end;
       end;
      end;        
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 06 14:10 #2555

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 80
  • Köszönetek: 16
Infó!
Az alapértelmezett Lazarus menüjében nincs benne, de telepíthető a MessageComposer nevü cucc, ami jobb mint a Prekox mester által írt cucc (remélem nem üt agyon , azért köszönet érte a közösség nevében is).
Telepités: menüpont : Csomag\Csomag telepitése/eltávolitása..., jobb oldalt a telepithető csomagok közül válasszuk a "messageComposerpkg 0.0"-t, katt a "Kijelöltek telepitése" gombra, aztán katt a "Mentés és IDE újraépítése" gombra.
Újrafordítás után a "Forráskód\Üzenetszerkesztő..." menüpont alatt érhető el.

Én sem tudtam, hogy ilyen is van, viszont a CodeTyphon cuccban alapból bele van fordítva.
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 06 07:30 #2554

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
Igazad van, a párbeszédablak megoldás a problémára! Utánanéztem most ezeknek itt:  wiki.lazarus.freepascal.org/Dialog_Examples
De akkor már a MessageDlg helyett a MessageBox-ot használom. Azt viszont furcsállom, hogy az első paraméterének mindenképp be kellett írnom egy szöveget, mert így:
 
var panelszoveg: array [0..1] of string;
   panelszoveg[0]:='Biztosan ki akarsz lépni?';
  panelszoveg[1]:='Are you sure you want to exit?';
 valasz:=Application.MessageBox(panelszoveg[nyelv], 'Megerősítés', stilus);
hibát okozott. De a lényeg, hogy egyébként működik és köszönet az ötletért! Ezt kerestem volna, csak nem jutott eszembe, így kénytelen voltam összeeszkábálni egy saját párbeszédablakot egy panelből és két gombból. 
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 05 16:55 #2553

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 80
  • Köszönetek: 16
Nem tudom, nem szoktam játékokat írni, de nem lenne egyszerübb pl. a kilépés gombra kattintáskor
if (MessageDlg('Biztosan kilépsz?',mtConfirmation,mbOkCancel,0)= mrOK) then
    close;


Így nem kell létrehozogatni meg felszabadítgatni a gombokat.

A letöltőközpontban van egy Üzenetbox szerkesztő cucc Prekox jóvoltából, persze ez csak windows alatt jó....

Vagy egy külön saját dialógusablakot is lehet csinálni, aminek a háttere és gombjai illeszkednek a játékhoz, és egy föggvénnyel le lehet kérdezni melyik gombot nyomták meg (pl.: Ok_gomb = 1, Cancel_gomb = 0 stb.).
És a saját dialógust jeleníted meg futásidőben...
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2
Megköszönték: Tomi
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 05 13:11 #2552

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 507
  • Köszönetek: 86

"A gomb(ok) OnKeyDown eseménykezelőjének állítsd be az ablak OnKeyDown eseménykezelőét."
Ezt nem nagyon értem...

A gomb(ok) kiválasztása után a tulajdonságok között a gomb(ok) OnKeyDown-jánál válaszd a FormKeyDown eljárást (amiben a billentyűket kezeled), tehát ne hozz létre nekik saját eseménykezelőt billentyűlenyomáshoz.
Ha esetleg nem tervezéskor, hanem futás közben akarod megtenni akkor pl.: Button1.OnKeyDown := @FormKeyDown
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 2021 okt. 05 13:02 #2551

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
A parent tulajdonságot beállítottam minden gombnál, de mégsem jó valamiért...
Tehát az az elgondolás a programomban, hogy a felhasználó rákattinthat a kilépés gombra, és arra megjelenik egy megerősítő szöveg (egy panelon a szöveg és az Igen-Nem gombpáros) és ha az Igen-re kattint, akkor kilép a programból, míg ha a Nem-re, akkor meg kellene semmisülnie a panelnek és a két gombnak:
procedure TForm1.kilepgombkatt(Sender: TObject);
var panelszoveg, igenszoveg, nemszoveg: array [0..1] of string;
begin
 panelszoveg[0]:='Biztosan ki akarsz lépni?';
 panelszoveg[1]:='Are you sure you want to exit?';
 felirathatter:=TPanel.Create(self);
 With felirathatter do
 begin
      Left:=round(Form1.width/2-TextWidth(panelszoveg[nyelv])/2);
      top:=round(Form1.height/2);
      Caption:=panelszoveg[nyelv];
      parent:=Form1;
 end;
 igenszoveg[0]:='Igen';
 igenszoveg[1]:='Yes';
 igengomb:=TButton.Create(self);
 With igengomb do
 begin
      Left:=felirathatter.left+1;
      top:=felirathatter.top+TextHeight('I')+41;
      Caption:=igenszoveg[nyelv];
      parent:=Form1;
      Onclick:=@kilepigenkatt;
 end;
 nemszoveg[0]:='Nem';
 nemszoveg[1]:='No';
 nemgomb:=TButton.Create(self);
 With nemgomb do
 begin
      Left:=igengomb.left+igengomb.width+4;
      top:=felirathatter.top+TextHeight('I')+41;
      Caption:=nemszoveg[nyelv];
      parent:=Form1;
      Onclick:=@kilepnemkatt;
 end;
 felirathatter.width:=igengomb.width+nemgomb.width+10;
 felirathatter.height:=igengomb.height+TextHeight('I')+10;
end;

procedure TForm1.kilepigenkatt(Sender: TObject);
begin
 close;
end;

procedure TForm1.kilepnemkatt(Sender: TObject);
begin
 igengomb.Free;
 felirathatter.Free;
 nemgomb.Free;
end; 
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 05 12:49 #2550

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
"A gomb(ok) OnKeyDown eseménykezelőjének állítsd be az ablak OnKeyDown eseménykezelőét."

Ezt nem nagyon értem... Most minden esemény a TForm1-ből származik a programomban. Tehát létrehozom a kilépésgombot:
procedure TForm1.FormCreate(Sender: TObject);
(...)
kilepgomb:=TButton.Create(self);
With kilepgomb do
begin
 Left:=1;
 top:=Form1.height-127;
 Caption:='Esc: X';
 parent:=self;
 Onclick:=@kilepgombkatt;
end;

Ez pedig a képernyőgörgetést és kilépést végző alprogram:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState   );
begin
 if Key=VK_RIGHT then
 begin
  if palyakepx+palyakep.canvas.width+4>width then
  begin
   dec(palyakepx,4);
  end;
 end;
 if Key=VK_LEFT then
 begin
  if palyakepx<0 then
  begin
   inc(palyakepx,4);
  end;
 end;
 if Key=VK_UP then
 begin
  if palyakepy+palyakep.canvas.height+4>height then
  begin
   dec(palyakepy,4);
  end;
 end;
 if Key=VK_DOWN then
 begin
  if palyakepy<0 then
  begin
   inc(palyakepy,4);
  end;
 end;
if Key=VK_ESCAPE then close;
end;
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 05 06:37 #2549

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 507
  • Köszönetek: 86
 

Van-e és ha igen, mi az az utasítás, amivel a Form-ot teljes képernyőssé tehetem?
...
A grafikát egyszerűen a Form-ra történő rajzolással csinálom;

Az ablak BorderStyle tulajdonságát állítsd "bsNone" értékre, a WindowState pedig "wsFullScreen" legyen (illetve bsSizeable és wsNormal ha újra normál ablakot szeretnél látni).

...meg az a hiba(?) is felbukkant, hogy ha létrehozok egy gombot a FormCreate-ben: kilepgomb:=TButton.Create(self);
...
akkor ezután valamiért a FormKeyDown blokkolódik, nem reagál a billentyűnyomásokra, ami eléggé kellemetlen nekem, mert így a nyíl gombokkal nem tudom görgetni a képernyőt.
Akkor most választanom kell, hogy vagy billentyűkezelés vagy létrehozott gomb?

A gomb(ok) OnKeyDown eseménykezelőjének állítsd be az ablak OnKeyDown eseménykezelőé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 2021 okt. 04 17:04 #2548

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 80
  • Köszönetek: 16
Form bezárására elég a Close eljárás hívása, ha az a főform, akkor kilép a program.
Viszont amit az OnCreate eseményben hozol létre objektumokat (amik valószínüleg a program futása alatt végig szükségesek), azokat az OnDestroy-ban kell felszabadítani (ha hamarabb felszabadítod, akkor ne hivatkozz tovább rá, vagy újra létre kell hozni). Amit tervezési időben pakolsz a formra, azt a form hozza létre és az szabadítja fel.
Ja, a parent tulajdonságot be kell állítani: 
....
KilepGomb:= TButton.Create(self);
KilepGomb.Parent:= Form1;

....
procedure TForm1.FormDestroy(Sender: TObject);
begin
  KilepGomb.FreeOnRelease;
end;
   
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 04 09:02 #2547

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
...meg az a hiba(?) is felbukkant, hogy ha létrehozok egy gombot a FormCreate-ben:
kilepgomb:=TButton.Create(self);
...
akkor ezután valamiért a FormKeyDown blokkolódik, nem reagál a billentyűnyomásokra, ami eléggé kellemetlen nekem, mert így a nyíl gombokkal nem tudom görgetni a képernyőt.
Akkor most választanom kell, hogy vagy billentyűkezelés vagy létrehozott gomb?
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 04 07:48 #2546

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
1. A grafikát egyszerűen a Form-ra történő rajzolással csinálom; semmi különös OpenGL vagy DirectX nincs benne.
2. Akkor az Application.Terminate-et jobb használnom mint a Close-t? Meg most csináltam egy külön kilépés gombot is, de amikor rákattintok a kilépés visszavonására, akkor SIGSEGV osztályú kivételt kapok, mikor a gombokat megsemmisíti:
procedure TForm1.kilepnemkatt(Sender: TObject);
begin
 igengomb.Free;
 felirathatter.Free;
 nemgomb.Free; //Lehet, hogy önmaga megsemmisítése gondot okoz?
end;
Téma zárolva.

Egy kezdő Lazarus használó kérdései 2021 okt. 04 02:33 #2545

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 507
  • Köszönetek: 86
1. A "teljes képernyőssé tétel" mikéntje attól függ, hogy  a grafikát hogyan/mivel (egyszerü rajzolás a formra, opengl, directx stb.) csinálod.
2. Az Application.Terminate hívása után az alkalmazás felszabadítja a futás közben lefoglalt összes memóriát majd befejezi a futását. Alapesetben nincs szükség az objektumok egyesével történő megsemmisítésére, persze az egyedi (spciális) erőforrások vagy eszközök használatát ajánlatos szabályosan befejezni.
 
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 2021 okt. 02 13:15 #2544

  • Tomi
  • Tomi profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 82
  • Köszönetek: 1
Sziasztok!
Egy RTS játékot fejlesztek Lazarusszal. Már jónéhány lényeges dolgot sikerült megoldanom benne, mint pl. a kép görgetése, a szereplők mozgatása, stb., ám a következő kérdéseim miatt talán mégis butácskának fogok tűnni:
1. van-e és ha igen, mi az az utasítás, amivel a Form-ot teljes képernyőssé tehetem? Tehát hogy csak a programom látszódjon, az operációs rendszer (Windows) tálcája és a játék címsora pedig ne?
2. ha ez az előbbi megoldható, akkor ugyebár az ablak Bezárás ikonja sem látszódik. Erre már beépítettem az ESC lenyomásához a Close utasítást. A játékban viszont van külön OnDestroy esemény is, amelyben törlöm a grafikus alkotóelemeket. A kérdésem, hogy ez a Close le is futtatja ezt az OnDestroy-t, vagy elé is be kell külön raknom a grafikus alkotóelemek törlését? Vagy az Application.Terminate a megfelelő kilépő utasítás? Melyik az, amely a legmegfelelőbb a program bezárására?
Köszönöm előre is a segítséget!
Téma zárolva.

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

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

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.
  • Oldal:
  • 1
  • 2
  • 3