tag kullanımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 08:46

Arkadaşlar,

aşağıdaki kod ile buton üretiyorum, ürettiğim butonun tag ını buluyorum yapmak istediğim tag ını bulduğum butonun rengini ve adını değiştirmek ?

birde ürettiğim tüm butonları silmek istiyorum ?

Teşekkürler

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  MASA: Integer;
  btnMASA: TButton;
begin
  for MASA := 1 to QRY_RS_MASALAR.RecordCount do
  begin
    btnMASA := TButton.Create(FlowPanel1);
    btnMASA.Parent := FlowPanel1;
    btnMASA.Caption := QRY_RS_MASALAR.FieldByName('MASA_ADI').Text;
    btnMASA.Height := 100;
    btnMASA.Width := 100;
    btnMASA.Info2:=Self.Tag;
    btnMASA.OnClick:=OnMasaClick;
    Self.Tag:=Self.Tag + 1;
    QRY_RS_MASALAR.Next;
  end;
end;


procedure TForm1.OnMasaClick(Sender: TObject);
begin
  if Sender is TButton then
  Caption:= TButton(Sender).Bilgi.ToString;
end;


Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 557
Kayıt: 11 Haz 2003 05:49
Konum: Adana
İletişim:

Re: tag kullanımı

Mesaj gönderen m_ekici » 25 Şub 2020 09:13

Kod: Tümünü seç

procedure TForm1.OnMasaClick(Sender: TObject);
begin
  if Sender is TButton then
     begin
    Caption:= TButton(Sender).Bilgi.ToString;
    (Sender as TButton).Name := BtnNamexx;
    (Sender as TButton).color := clGreen;
    end;
end;

erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

Re: tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 09:24

böyle değilde, tag 10 olan butona işlem yapmak istiyorum

erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

Re: tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 09:27

ve kodda çalışmıyor :(

tam kod aşağıdaki gibi.

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, cxGraphics, cxControls, cxLookAndFeels,
  cxLookAndFeelPainters, cxStyles, cxCustomData, cxFilter, cxData,
  cxDataStorage, cxEdit, cxNavigator, dxDateRanges, Data.DB, cxDBData,
  Vcl.StdCtrls, Vcl.Mask, Vcl.DBCtrls, cxGridLevel, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxClasses, cxGridCustomView, cxGrid,
  DBAccess, Uni, SQLServerUniProvider, UniProvider, ODBCUniProvider,
  AccessUniProvider, MemDS, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids;

type
  TForm1 = class(TForm)
    srcQRY_SIPARISLER: TUniDataSource;
    QRY_RS_MASALAR: TUniQuery;
    AccessUniProvider1: TAccessUniProvider;
    SQLServerUniProvider1: TSQLServerUniProvider;
    DB: TUniConnection;
    Button1: TButton;
    Button2: TButton;
    FlowPanel1: TFlowPanel;
    Button3: TButton;
    DBGrid1: TDBGrid;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);



    type
  TButton = class(Vcl.StdCtrls.TButton)
  private
    FBilgi: integer;
  public
    property Bilgi: integer read FBilgi write FBilgi;
  end;
  private
    { Private declarations }
    procedure OnMasaClick(Sender: TObject);
   public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
  MASA: Integer;
  btnMASA: TButton;
begin
  for MASA := 1 to QRY_RS_MASALAR.RecordCount do
  begin
    btnMASA := TButton.Create(FlowPanel1);
    btnMASA.Parent := FlowPanel1;
    btnMASA.Caption := QRY_RS_MASALAR.FieldByName('MASA_ADI').Text;
    btnMASA.Height := 100;
    btnMASA.Width := 100;
    btnMASA.Bilgi:=Self.Tag;
    btnMASA.OnClick:=OnMasaClick;
    Self.Tag:=Self.Tag + 1;
    QRY_RS_MASALAR.Next;
  end;
end;


procedure TForm1.OnMasaClick(Sender: TObject);
begin
  if Sender is TButton then
     begin
    Caption:= TButton(Sender).Bilgi.ToString;
    //(Sender as TButton).Name := 'BtnNamexx';
    (Sender as TButton).color := clGreen;
    end;

                                {
  if Sender is TButton then
  Caption:= TButton(Sender).Bilgi.ToString;  }
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
     QRY_RS_MASALAR.Open;
     QRY_RS_MASALAR.Refresh;
end;

end.

Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 353
Kayıt: 05 Oca 2012 12:55

Re: tag kullanımı

Mesaj gönderen xozcanx » 25 Şub 2020 09:48

Kod: Tümünü seç

var
   i:integer;
Begin
  for i := 0 to ComponentCount-1 do
  begin
    if (Components[i] is TButton) AND (TButton(Components[i]).Tag=10) Then
    Begin
      TButton( Components[i]).Caption :='BtnNamexx';
      TButton( Components[i]).Color   :=clGreen;
      TButton( Components[i]).Free; // Silmek için..
    End;
  end;
End;
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..

erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

Re: tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 09:52

çalışmadı :(

tag 10 olan a basınca hatada vermiyor çalışmıyorda
xozcanx yazdı:
25 Şub 2020 09:48

Kod: Tümünü seç

var
   i:integer;
Begin
  for i := 0 to ComponentCount-1 do
  begin
    if (Components[i] is TButton) AND (TButton(Components[i]).Tag=10) Then
    Begin
      TButton( Components[i]).Caption :='BtnNamexx';
      TButton( Components[i]).Color   :=clGreen;
      TButton( Components[i]).Free; // Silmek için..
    End;
  end;
End;

erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

Re: tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 09:55

Ekrandaki herşeyi siliyor :)

TButton( Components).Free; // Silmek için..

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2180
Kayıt: 12 Haz 2003 03:05
Konum: merkez camii yanı

Re: tag kullanımı

Mesaj gönderen freeman35 » 25 Şub 2020 10:17

"btnMASA.Info2:=Self.Tag;"
tag ı nerde neye eşitliyorsun? tbutton class ında Info2 diye bir property mi var?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 353
Kayıt: 05 Oca 2012 12:55

Re: tag kullanımı

Mesaj gönderen xozcanx » 25 Şub 2020 10:19

Kod: Tümünü seç

var
   i:integer;
Begin
   for i := frmMain.ComponentCount - 1 downto 0 do 
  begin
    if (Components[i] is TButton) AND (TButton(Components[i]).Tag=10) Then
    Begin
      TButton( Components[i]).Caption :='BtnNamexx';
      TButton( Components[i]).Color   :=clGreen;
      TButton( Components[i]).Free; // Silmek için..
    End;
  end;
End;
Merhaba,
Burada, Tüm Form içerisindeki Componentler taranır ve Bunların içinden TButton neslerinin tag kısmı kontrol edilir ve 10 yazanlar silinir. Eğer Siz döngü içinde

Kod: Tümünü seç

TButton( Components).Free; 
derseniz normal olarak bizim şartımıza bakmadan silecektir.
TButton( Components [ i ] ).Free dikkat edin.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..

erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

Re: tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 10:24

freeman35 yazdı:
25 Şub 2020 10:17
"btnMASA.Info2:=Self.Tag;"
tag ı nerde neye eşitliyorsun? tbutton class ında Info2 diye bir property mi var?
info2 yok hocam tüm kod aşağıdaki gibi,

asıl yapmak istediğim butonlar oluşturup x butonun adını rengini değiştirmek ve butonların onclik olayını çalıştırmak.

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, cxGraphics, cxControls, cxLookAndFeels,
  cxLookAndFeelPainters, cxStyles, cxCustomData, cxFilter, cxData,
  cxDataStorage, cxEdit, cxNavigator, dxDateRanges, Data.DB, cxDBData,
  Vcl.StdCtrls, Vcl.Mask, Vcl.DBCtrls, cxGridLevel, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxClasses, cxGridCustomView, cxGrid,
  DBAccess, Uni, SQLServerUniProvider, UniProvider, ODBCUniProvider,
  AccessUniProvider, MemDS, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids;

type
  TForm1 = class(TForm)
    srcQRY_SIPARISLER: TUniDataSource;
    QRY_RS_MASALAR: TUniQuery;
    AccessUniProvider1: TAccessUniProvider;
    SQLServerUniProvider1: TSQLServerUniProvider;
    DB: TUniConnection;
    Button1: TButton;
    Button2: TButton;
    FlowPanel1: TFlowPanel;
    Button3: TButton;
    DBGrid1: TDBGrid;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);



    type
  TButton = class(Vcl.StdCtrls.TButton)
  private
    FBilgi: integer;
  public
    property Bilgi: integer read FBilgi write FBilgi;
  end;
  private
    { Private declarations }
    procedure OnMasaClick(Sender: TObject);
   public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
  MASA: Integer;
  btnMASA: TButton;
begin
  for MASA := 1 to QRY_RS_MASALAR.RecordCount do
  begin
    btnMASA := TButton.Create(FlowPanel1);
    btnMASA.Parent := FlowPanel1;
    btnMASA.Caption := QRY_RS_MASALAR.FieldByName('MASA_ADI').Text;
    btnMASA.Height := 100;
    btnMASA.Width := 100;
    btnMASA.Bilgi:=Self.Tag;
    btnMASA.OnClick:=OnMasaClick;
    Self.Tag:=Self.Tag + 1;
    QRY_RS_MASALAR.Next;
  end;
end;


procedure TForm1.OnMasaClick(Sender: TObject);
var
   i:integer;
Begin
  if Sender is TButton then
  Caption:= TButton(Sender).Bilgi.ToString;
  for i := 0 to ComponentCount-1 do
  begin
    if (Components[i] is TButton) AND (TButton(Components[i]).Tag=10) Then
    Begin
      TButton( Components[i]).Caption :='BtnNamexx';
      TButton( Components[i]).Color   :=clGreen;
    //  TButton( Components[i]).Free; // Silmek için..
    End;
  end;


end;


procedure TForm1.Button2Click(Sender: TObject);
begin
     QRY_RS_MASALAR.Open;
     QRY_RS_MASALAR.Refresh;
end;

procedure TForm1.Button3Click(Sender: TObject);
Begin
TButton(Components).Free;
end.

erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

Re: tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 10:24

xozcanx yazdı:
25 Şub 2020 10:19

Kod: Tümünü seç

var
   i:integer;
Begin
   for i := frmMain.ComponentCount - 1 downto 0 do 
  begin
    if (Components[i] is TButton) AND (TButton(Components[i]).Tag=10) Then
    Begin
      TButton( Components[i]).Caption :='BtnNamexx';
      TButton( Components[i]).Color   :=clGreen;
      TButton( Components[i]).Free; // Silmek için..
    End;
  end;
End;
Merhaba,
Burada, Tüm Form içerisindeki Componentler taranır ve Bunların içinden TButton neslerinin tag kısmı kontrol edilir ve 10 yazanlar silinir. Eğer Siz döngü içinde

Kod: Tümünü seç

TButton( Components).Free; 
derseniz normal olarak bizim şartımıza bakmadan silecektir.
TButton( Components [ i ] ).Free dikkat edin.

bende çalışmıyor hata da vermiyor, delphi10.3 kullanıyorum

bu kısım hatalı
TButton( Components).Caption :='BtnNamexx';

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2180
Kayıt: 12 Haz 2003 03:05
Konum: merkez camii yanı

Re: tag kullanımı

Mesaj gönderen freeman35 » 25 Şub 2020 10:27

hatayı yazmazsan kim nerden bilecek?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

Re: tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 10:28

bir hata vermiyor ve çalışmıyor

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2180
Kayıt: 12 Haz 2003 03:05
Konum: merkez camii yanı

Re: tag kullanımı

Mesaj gönderen freeman35 » 25 Şub 2020 10:34

freeman35 yazdı:
25 Şub 2020 10:17
"btnMASA.Info2:=Self.Tag;"
"tag ı nerde neye eşitliyorsun?" tbutton class ında Info2 diye bir property mi var?
bi kahve, çay molası ber, sonra kodunu debug et bakalım.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

erdogan_ozkaya
Üye
Mesajlar: 826
Kayıt: 03 Eki 2007 01:00

Re: tag kullanımı

Mesaj gönderen erdogan_ozkaya » 25 Şub 2020 10:46

Hocam debug ediyorum ama bu kod ile ilgili bir hata vermiyor ?


ve çalışmıyorda

(tag 10 olan butona basıyorum)


procedure TForm1.OnMasaClick(Sender: TObject);
var
i:integer;
Begin
if Sender is TButton then
Caption:= TButton(Sender).Bilgi.ToString;
for i := 0 to ComponentCount-1 do
begin
if (Components is TButton) AND (TButton(Components).Tag=10) Then
Begin
TButton( Components).Caption :='BtnNamexx';
TButton( Components).Color :=clGreen;
// TButton( Components).Free; // Silmek için..
End;
end;


end;

Cevapla