Delphi Can

Orjinalini görmek için tıklayınız: Runtime ile SpinEdit toplamı alma
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Herkese merhaba,

Runtime süresi içerisinde oluşturduğum SpinEdit're nasıl toplam aldıracağıma dair bir çözüm bulmadım, toplama esnasında son kullanılanı baz alıp topluyor.
Normal olmuş olsa aşağıdaki gibi bir çözüm var ama runtime olduğu için tek ayırt edici özelllik tagları.

Total := SpinEdit1.Value + SpinEdit2.Value + SpinEdit3.Value;




if Sender is TSpinEdit then
 begin

  if TSpinEdit(Sender).Tag = 1 then
  begin

  TSpinEdit(Sender).MinValue := 200;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 200;

end;

  if TSpinEdit(Sender).Tag = 2 then
  begin 
  TSpinEdit(Sender).MinValue := 100 ;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 100;
  end;


  if TSpinEdit(Sender).Tag = 3 then
  begin
 TSpinEdit(Sender).MinValue := 25 ;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 25;
  end;
(04-12-2024, Saat: 10:45)denizfatihi Adlı Kullanıcıdan Alıntı: [ -> ]Herkese merhaba,

Runtime süresi içerisinde oluşturduğum SpinEdit're nasıl toplam aldıracağıma dair bir çözüm bulmadım, toplama esnasında son kullanılanı baz alıp topluyor.
Normal olmuş olsa aşağıdaki gibi bir çözüm var ama runtime olduğu için tek ayırt edici özelllik tagları.

Total := SpinEdit1.Value + SpinEdit2.Value + SpinEdit3.Value;




if Sender is TSpinEdit then
 begin

  if TSpinEdit(Sender).Tag = 1 then
  begin

  TSpinEdit(Sender).MinValue := 200;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 200;

end;

  if TSpinEdit(Sender).Tag = 2 then
  begin 
  TSpinEdit(Sender).MinValue := 100 ;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 100;
  end;


  if TSpinEdit(Sender).Tag = 3 then
  begin
 TSpinEdit(Sender).MinValue := 25 ;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 25;
  end;


Onchange Eventi oluştur. tümünü create ederken bu metodu referans göster toplamları içinde yap.
unit MainUnit;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, ColumnCellsFormat,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Rest.Json, ComObj, Vcl.StdCtrls, Vcl.Samples.Spin;

type
 TMainForm = class(TForm)
   SpinEdit1: TSpinEdit;
   SpinEdit2: TSpinEdit;
   procedure FormCreate(Sender: TObject);
   procedure SpinEditOnChange(Sender: TObject);
 private

 public
   { Public declarations }
 end;

var
 MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);

begin

 with TSpinEdit.Create(self) do
 begin
   tag := 54;
   Left := 160;
   Top := 128;
   Width := 121;
   Height := 24;
   OnChange := SpinEditOnChange;
   Parent := MainForm
 end;

 with TSpinEdit.Create(self) do
 begin
   tag := 54;
   Left := 160;
   Top := 158;
   Width := 121;
   Height := 24;
   OnChange := SpinEditOnChange;
   Parent := MainForm
 end;

end;

procedure TMainForm.SpinEditOnChange(Sender: TObject);
var
 i: integer;
 toplam: NativeUInt;
begin
 for i := 0 to self.ComponentCount - 1 do
 begin
   if (self.Components[i] is TSpinEdit) then
   begin
     if (TSpinEdit(self.Components[i]).tag = 54) then
     begin
       toplam := toplam + TSpinEdit(self.Components[i]).Value;

     end;
   end;
 end;
 Caption := toplam.ToString;
end;

end.
Öncelikle çok teşekkür ederim.

Yazıdan sonra bakarken biraz dolambaçlı da olsa başka bir çözüm buldum değerleri labella aktarıp en alt kısımda toplam almak gibi.



if Sender is TSpinEdit then
 begin

  if TSpinEdit(Sender).Tag = 1 then
  begin

  TSpinEdit(Sender).MinValue := 200;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 200;
  
200.Caption:= FloatToStr(TSpinEdit(Sender).Value);  //eklenen kısmlar 

end;


  if TSpinEdit(Sender).Tag = 2 then
  begin

 
  TSpinEdit(Sender).MinValue := 100 ;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 100;
  100.Caption:= FloatToStr(TSpinEdit(Sender).Value);
  end;



  if TSpinEdit(Sender).Tag = 3 then
  begin

TSpinEdit(Sender).MinValue := 25 ;
  TSpinEdit(Sender).MaxValue := 10000;
  TSpinEdit(Sender).Increment:= 25;
  25.Caption:= FloatToStr(TSpinEdit(Sender).Value);
  end;

Total := strtofloat(200.Caption) + strtofloat(100.Caption) + + strtofloat(25.Caption)
Seni yanlış anlamışım. Ben tüm spineditlerin toplamını bir yerde görmek istiyorsun sandım.

200.Caption:= FloatToStr(TSpinEdit(Sender).Value); 

yerine


TSpinEdit(Sender).Caption:= FloatToStr(TSpinEdit(Sender).Value); 

yaz bari Smile
En alt satırda kümüle toplama gelince yine kafa karıştıracak, çalışıyorsa dokunma Smile
Teşekkür ederim tekrardan. 

Total := strtofloat(200.Caption) + strtofloat(100.Caption) +  strtofloat(25.Caption)
(04-12-2024, Saat: 11:59)denizfatihi Adlı Kullanıcıdan Alıntı: [ -> ]En alt satırda kümüle toplama gelince yine kafa karıştıracak, çalışıyorsa dokunma Smile
Teşekkür ederim tekrardan. 

Total := strtofloat(200.Caption) + strtofloat(100.Caption) +  strtofloat(25.Caption)

Benim paylaştığım gibi dinamik toplasan hiç bir yer karışmaz Wink Yarın yeni bir spin eklemen gerektiğinde satır satır gezersin.