Delphi Can
Runtime ile SpinEdit toplamı alma - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Runtime ile SpinEdit toplamı alma (/showthread.php?tid=7958)



Runtime ile SpinEdit toplamı alma - denizfatihi - 04-12-2024

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;



Runtime ile SpinEdit toplamı alma - yhackup - 04-12-2024

(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.


Cvp: Runtime ile SpinEdit toplamı alma - RAD Coder - 04-12-2024

[attachment=2827]


Cvp: Runtime ile SpinEdit toplamı alma - yhackup - 04-12-2024

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.



Cvp: Runtime ile SpinEdit toplamı alma - denizfatihi - 04-12-2024

Ö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)



Runtime ile SpinEdit toplamı alma - yhackup - 04-12-2024

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


Cvp: Runtime ile SpinEdit toplamı alma - denizfatihi - 04-12-2024

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)



Runtime ile SpinEdit toplamı alma - yhackup - 04-12-2024

(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.