Merhabalar Delphi7 form1 de panellerim var 10 adet ve her bir panelin içinde bir label var panel6 ise label i de altı panel 9 ise labeli de label9
ben sağ tıkladığımda kime sağ tıkladıysam onun labelinin caption u değişsin istiyorum fakat runtime da nesneyi algılayamıyorum yada ben bilmiyorum
yardımcı olan arkadaşlara şimdiden çok teşekkür edereim..
bir ara aplicationevents ile yapılıyordu gibi bir şey makalelerde okumuştum ama bulamadım nette yeterli kaynak yok..
üzerine tıklanan nesneyi algılamak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: üzerine tıklanan nesneyi algılamak
TPopupMenu kullanıyorsan PopupMenu1.PopupComponent değeri işini görür.
There's no place like 127.0.0.1
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: üzerine tıklanan nesneyi algılamak
Tam dinamik yapmak istersen aşağıdaki gibi yapabilirsin
yada aynı ivent altına iflerle karşılaştırma yapabilirsin.
Test örneği
DFM
PAS
yada aynı ivent altına iflerle karşılaştırma yapabilirsin.
Kod: Tümünü seç
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
I : Integer;
sName, sPanelNo:String;
begin
if Button = mbRight then
begin
sName := (Sender as TPanel).Name;
for I := 1 to Length(sName) do
if sName[I] in ['0'..'9'] then
sPanelNo := sPanelNo + sName[I];
for I := 0 to (Sender as TPanel).ControlCount - 1 do
begin
if ((Sender as TPanel).Controls[I] is TLabel) then
begin
if UpperCase(((Sender as TPanel).Controls[I] as TLabel).Name) = 'LABEL' + sPanelNo then
((Sender as TPanel).Controls[I] as TLabel).Caption := ((Sender as TPanel).Name);
end;
end;
end;
end;
Test örneği
DFM
Kod: Tümünü seç
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 300
ClientWidth = 635
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 26
Top = 24
Width = 283
Height = 87
Caption = 'Panel1'
TabOrder = 0
OnMouseUp = Panel1MouseUp
object Label1: TLabel
Left = 14
Top = 20
Width = 75
Height = 23
Caption = 'Label1'
end
end
object Panel2: TPanel
Left = 26
Top = 134
Width = 287
Height = 73
Caption = 'Panel2'
TabOrder = 1
OnMouseUp = Panel1MouseUp
object Label2: TLabel
Left = 18
Top = 20
Width = 95
Height = 17
Caption = 'Label2'
end
end
end
Kod: Tümünü seç
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
I : Integer;
sName, sPanelNo:String;
begin
if Button = mbRight then
begin
sName := (Sender as TPanel).Name;
for I := 1 to Length(sName) do
if sName[I] in ['0'..'9'] then
sPanelNo := sPanelNo + sName[I];
for I := 0 to (Sender as TPanel).ControlCount - 1 do
begin
if ((Sender as TPanel).Controls[I] is TLabel) then
begin
if UpperCase(((Sender as TPanel).Controls[I] as TLabel).Name) = 'LABEL' + sPanelNo then
((Sender as TPanel).Controls[I] as TLabel).Caption := ((Sender as TPanel).Name);
end;
end;
end;
end;
end.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
-
- Üye
- Mesajlar: 216
- Kayıt: 10 Ara 2013 03:50
Re: üzerine tıklanan nesneyi algılamak
Aşağıdaki örneğin işinizi göreceğini umuyorum.
Ben 3 tane panel ve herbirinin içine birer label koyarak aşağıdaki kodla bir deneme yaptım. Mouse down yerine Up'ı tercih ettim, bunu değiştirebilirsiniz. Anladığım kadarıyla sizin istediğiniz gibi oldu.
Ben 3 tane panel ve herbirinin içine birer label koyarak aşağıdaki kodla bir deneme yaptım. Mouse down yerine Up'ı tercih ettim, bunu değiştirebilirsiniz. Anladığım kadarıyla sizin istediğiniz gibi oldu.
Kod: Tümünü seç
type
TForm1 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Panel2: TPanel;
Label2: TLabel;
Panel3: TPanel;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
private
procedure PanelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.PanelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button <> mbRight then Exit;
if Sender is TLabel then
TLabel(Sender).Caption := TLabel(Sender).Parent.Name + '''deki ' + TLabel(Sender).Name + '''e tıkladın';
if Sender is TPanel then
TLabel(FindComponent('Label' + Copy(TPanel(Sender).Name, 6, 2))).Caption := TPanel(Sender).Name + '''e tıkladın';
end;
procedure TForm1.FormCreate(Sender: TObject);
const PanelSayisi = 3; // kaç tane panel varsa
var i: Integer;
dcmp: TComponent;
begin
for i := 1 to PanelSayisi do
begin
TPanel(FindComponent('Panel' + InttoStr(i))).OnMouseUp := PanelMouseUp;
TLabel(FindComponent('Label' + InttoStr(i))).OnMouseUp := PanelMouseUp;
end;
end;
Re: üzerine tıklanan nesneyi algılamak
Merhaba,osiso yazdı:Merhabalar Delphi7 form1 de panellerim var 10 adet ve her bir panelin içinde bir label var panel6 ise label i de altı panel 9 ise labeli de label9
ben sağ tıkladığımda kime sağ tıkladıysam onun labelinin caption u değişsin istiyorum fakat runtime da nesneyi algılayamıyorum yada ben bilmiyorum
yardımcı olan arkadaşlara şimdiden çok teşekkür edereim..
bir ara aplicationevents ile yapılıyordu gibi bir şey makalelerde okumuştum ama bulamadım nette yeterli kaynak yok..
Örnek uygulama paylaşmanız mümkün müdür?