üzerine tıklanan nesneyi algılamak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
osiso
Üye
Mesajlar: 46
Kayıt: 02 Eki 2007 05:56
Konum: İSTANBUL
İletişim:

üzerine tıklanan nesneyi algılamak

Mesaj gönderen osiso »

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..
Vurulup Tertemiz Alnından uzanmış Yatıyor
Bir Hilal Uğruna Ya Rab, Ne Güneşler Batıyor!
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: üzerine tıklanan nesneyi algılamak

Mesaj gönderen SimaWB »

TPopupMenu kullanıyorsan PopupMenu1.PopupComponent değeri işini görür.
There's no place like 127.0.0.1
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: üzerine tıklanan nesneyi algılamak

Mesaj gönderen adelphiforumz »

Tam dinamik yapmak istersen aşağıdaki gibi yapabilirsin
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
PAS

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
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: üzerine tıklanan nesneyi algılamak

Mesaj gönderen xxxjedixxx »

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.

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;

ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: üzerine tıklanan nesneyi algılamak

Mesaj gönderen ertank »

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..
Merhaba,

Örnek uygulama paylaşmanız mümkün müdür?
Cevapla