Lazarus 2.0.12 (2021.02.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz:dinamikus komponensek eseményeinek kezelése 2014 dec. 28 20:04 #1428

  • sa781207
  • sa781207 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 16
  • Köszönetek: 0
Nem eredendően linux-ra lett előállítva, hanem több plattforom programozási nyelv. És az emberek többsége win-t használ.

Válasz:dinamikus komponensek eseményeinek kezelése 2014 dec. 28 19:59 #1427

  • sa781207
  • sa781207 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 16
  • Köszönetek: 0
Húzd le mindig a legújabb lazarust a lazarus. orgról.
Sokat fejlődött ...

Válasz:dinamikus komponensek eseményeinek kezelése 2014 dec. 28 19:58 #1426

  • sa781207
  • sa781207 profilkép
  • Új tag
  • Új tag
  • Hozzászólások: 16
  • Köszönetek: 0
Legújabb lazarus. 1.
Stabil oprendszer 2.
Win Xp, de inkább manapság win7.
Szövegszerkesztővel a past ?
Most az IDE-re gondolsz ami IDE mindig is (Integrated Developer Editor) vagy buheráltál ?
Az LFM-nek nagyon nem kéne neki esni ...
Megcsinálod a komponenseket aztán elkészíti.

Válasz:dinamikus komponensek eseményeinek kezelése 2012 máj. 26 18:14 #1085

  • egocska
  • egocska profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Megtaláltam az okot. A uses végére be kellett bigyesztenem a StdCtrls; modult és működött is.

Sajnos erre azért volt szükségem, mert eltűnt egy csomó dolog az egyik .lfm file-ból és így vissza tudtam rakni egy korábbi mentésből.

Válasz:dinamikus komponensek eseményeinek kezelése 2012 máj. 26 18:07 #1084

  • ejbenjaro
  • ejbenjaro profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 66
  • Köszönetek: 4
Kézzel nem érdemes belenyúlkálni az lfm fájlba. Azt hagyd meg a szerkesztőnek, a dinamikusan létrehozott komponenseket pedig programon belül kezeld le.
Mottó:
"Az ember sokszor más mint aminek látszik. De ritkán jobb..."
--
Gép : Asus P5G41T-M LX, Intel Celeron DC E3400, 4GB DDR3, 320GB SATA2, minden más integrált.
OS : Ubuntu 14.04
--
web: lassuviz.blogspot.hu/

Válasz:dinamikus komponensek eseményeinek kezelése 2012 máj. 26 17:56 #1083

  • egocska
  • egocska profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Köszönöm, kezdem kapizsgálni. A délutánomat ennek a megértésével töltöttem. Csináltam egy próbát, de valami nem megy.

Elmentettem egy project-et, ami csak egy üres form volt. Aztán szövegszerkesztővel szerkesztettem a .pas és a .lfm file-kat.

a .pas-ba:

edit1: TEdit; sort tettem bele,

a .lfm-be:

object Edit1: TEdit
Left = 88
Height = 21
Top = 130
Width = 147
TabOrder = 0
Text = 'Edit1'
end


amikor elindítottam a project-et, az edit1 nevű TEdit komponens ott figyelt a formon (gondoltam hurrá), azonban a fordító hibaüzenettel leállt. A hibaüzenet: dinamikus.pas(12,17) Error: Identifier not found "TEdit"

Namármost, ezt végképp nem értem.

A teljes .pas kód:

unit dinamikus;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;


type

{ TForm1 }

TForm1 = class(TForm)
Edit1: TEdit;
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

end.

A teljes .lfm kód:

object Form1: TForm1
Left = 557
Height = 240
Top = 446
Width = 679
Caption = 'Form1'
ClientHeight = 240
ClientWidth = 679
LCLVersion = '0.9.30.4'
object Edit1: TEdit
Left = 88
Height = 21
Top = 130
Width = 147
TabOrder = 0
Text = 'Edit1'
end
end

Válasz:dinamikus komponensek eseményeinek kezelése 2012 máj. 26 17:42 #1082

  • ejbenjaro
  • ejbenjaro profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 66
  • Köszönetek: 4
egocska írta::

Sajnos még nem tudom miként lehet lekérdezni, melyik komponens váltotta ki az eseményt, de rajta vagyok az ügyön.


Amikor létrehozod a dinamikus objektumodat pl egy gombot, akkor állítsd be a tag propertyjét. Ez minden egyes létrehozott darabnál legyen egyedi, mert ez alapján fogod tudni eldönteni, hogy melyik elemről van szó.
Aztán az eseménykor bekövetkező eljárásban pedig felhasználod a Sender paramétert az azonosításhoz.
pl.:
procedure TForm1.DinBtnClick(Sender: TObject);
begin
  if (sender as tbutton).tag=1 then inc(x); //vagy valami ilyesmi
end;

egocska írta::

Ebben a kódban sehol nem találok onClick hozzárendelést. Ezt az IDE hol (vagy hová) helyezi el?


A projekted mappájában van egy lfm kiterjesztésű fájl is, azokat eseményhozzárendeléseket, amelyeket az IDE-ben állítasz be itt tárolja lévén ebben vannak leírva a Form és minden felhasznált komponens adatai.
Mottó:
"Az ember sokszor más mint aminek látszik. De ritkán jobb..."
--
Gép : Asus P5G41T-M LX, Intel Celeron DC E3400, 4GB DDR3, 320GB SATA2, minden más integrált.
OS : Ubuntu 14.04
--
web: lassuviz.blogspot.hu/

Válasz:dinamikus komponensek eseményeinek kezelése 2012 máj. 26 14:59 #1080

  • egocska
  • egocska profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Sikerült megoldanom, köszönöm a segítséget. Amikor létrehozom a komponenseket, az egyes komponensek onClick eseményéhez hozzárendelem a végrehajtandó eljárást.

Sajnos még nem tudom miként lehet lekérdezni, melyik komponens váltotta ki az eseményt, de rajta vagyok az ügyön.

Ezzel kapcsolatban lenne még kérdésem, mert eléggé kezdö vagyok és nem igazán értem ezeket az eseményprogramozásokat.

Ha létrehozok egy Form-ot és ráteszek egy TEdit1 komponenst, továbbá a TEdit1 komponens onClick eseményére kattintok, az alábbi kód jön létre:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Edit1Click(Sender: TObject);
begin

end;


Természetesen amit az eljárás törzsébe írok, az végrehajtódik egy kattintás során.

Ebben a kódban sehol nem találok onClick hozzárendelést. Ezt az IDE hol (vagy hová) helyezi el?

Válasz:dinamikus komponensek eseményeinek kezelése 2012 máj. 25 05:40 #1077

  • ejbenjaro
  • ejbenjaro profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 66
  • Köszönetek: 4
Az edit melyik eseményét akarod lekezelni? Valahol meg kell adni, hogy mit hívjon meg az esemény bekövetkeztekor, mondjuk amikor a dinamikus objektumot létrehozod, akkor beleírsz egy ilyet:
  TEdit1.onclick:=@kiiro_ablakClick
Itt van egy strigulázó programom: vadaszpeter.blogja.net/ccount/click.php?id=6
illetve itt csak a forráskód: dl.dropbox.com/u/2766266/Source.zip
Ebben dinamikusan létrehozott komponenseknek nekem is létre kellett hozni onclick eseményt. A program eredendően Linuxra lett előállítva, de talán win alatt is megy. Jó szórakozást hozzá.
Mottó:
"Az ember sokszor más mint aminek látszik. De ritkán jobb..."
--
Gép : Asus P5G41T-M LX, Intel Celeron DC E3400, 4GB DDR3, 320GB SATA2, minden más integrált.
OS : Ubuntu 14.04
--
web: lassuviz.blogspot.hu/

Válasz:dinamikus komponensek eseményeinek kezelése 2012 máj. 24 06:08 #1076

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 463
  • Köszönetek: 76
A kattintáskor végrehajtandó eseménykezelő eljárást (kiiro_ablakClick) az adott eseményhez (onClick) kell társítanod, így:
Tszolgalat.onClick:=Tszolgalat.kiiro_ablakClick;
vagy akármi más is lehet az eljárás neve:
Tszolgalat.onClick:=Tszolgalat.kattintaskor_ez_fusson;
Ha ezt nem teszed meg akkor az onClick értéke nil, vagyis nincs mit végrehajtani az esemény bekövetkeztekor.

Természetesen az onClick és a többi eseményhez is csak a szükséges paraméterekkel hívható eljárások adhatók meg, melyeknek kötelezően object/class metódusoknak kell lenniük.
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

Válasz:dinamikus komponensek eseményeinek kezelése 2012 máj. 23 21:29 #1075

  • prekox
  • prekox profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 87
  • Köszönetek: 4
Részletesebb kód jól jönne!
Egyébként meg add értékül az eseménykezelőt az eseménynek minden komponensnél (főleg, ha mindegyik ugyanazt csinálja).
i5 3470
8GB
Win 10
CodeTyphon 7.0

dinamikus komponensek eseményeinek kezelése 2012 máj. 23 18:40 #1074

  • egocska
  • egocska profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Sziasztok!

Szép ez a Lazarus, de kevés leírás miatt minden egyes problémával alaposan meg kell küzdeni... :)

Egy újabb problémába futottam, amivel nem vergődöm zöldágra.

Dinamikusan létrehoztam több TEdit komponenst, azonban ezeknek nem tudom az eseményét kezelni. Vagyis a neten amit találtam nem müxik.

Az alábbival próbálkozom:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, DateUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Menus;

type

...

procedure kiiro_ablakClick(Sender: TObject);

...

procedure Tszolgalat.kiiro_ablakClick(Sender: TObject);
begin
Ezt kellene végrehajtania, de nem lép be ide.

end;

Sajnos semmit nem találok ami érthetövé tenné számomra. A programnyelvek portálon van valami leírás, az alapján müködnie kellene, de nem teszi azt amit szeretnék.

Ha valaki egy ötletet adna merre induljak, elöre is megköszönöm.

Egocska.

  • Oldal:
  • 1