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

En alt satırda kümüle toplama gelince yine kafa karıştıracak, çalışıyorsa dokunma

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

Yarın yeni bir spin eklemen gerektiğinde satır satır gezersin.