forumsad yazdı:form kodları
Kod: Tümünü seç
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject);
begin
yaz(Edit1.Text);
end;
unit kodları
Kod: Tümünü seç
unit Unit2;
interface
procedure yaz(g:string);
implementation
uses Unit1, SysUtils;
procedure yaz(g:string);
begin
if StrToInt(g)>10 then Form1.Edit1.Clear; //Form1.Edit1.Text:='';
end;
edit içine 10 dan büyük değer girildiğinde editi unit içinden temizlemesini istiyorum ama hata alıyorum değer integer değil gibi bir hata
sebebi ne olabilir acaba saygılarımla
Merhaba,
Sorunuzda kullandığınız Delphi sürümünü bildirmemişsiniz. Ben son sürümlerden birisi olduğunu varsayarak "uses" kısımlarını düzenledim. Gerekli olur ise siz eski sürümlere göre yeniden düzenleyebilirsiniz.
Gönderdiğiniz kod örneğinde mantık hatası mevcut. Siz Yaz() prosedürü içine string değer göndererek Form1 içindeki bir Edit nesnesinin içini boşaltmasını istiyorsunuz. Bunun yerine nesnenin kendisini gönderip direk prosedür içinde değiştirmeniz mümkün. Bu şekilde yaptığınız zaman yardımcı kullandığınız unit Form1 için referansta bulunmasına gerek kalmaz ve genel kullanılabilir bir prosedür olur.
Örnek kod aşağıdadır.
Kod: Tümünü seç
unit Unit2;
interface
uses
SysUtils,
Vcl.StdCtrls;
procedure Yaz(const Edit: TCustomEdit);
implementation
procedure Yaz(const Edit: TCustomEdit);
var
TempString: string;
Value: Integer;
begin
TempString := Trim(Edit.Text);
if not TryStrToInt(TempString, Value) then
begin
Edit.Text := EmptyStr;
Exit();
end;
if Value > 10 then Edit.Text := EmptyStr;
end;
end.
Yukarıdaki prosedür içinde özellikle TCustomEdit şeklinde tanımlama yapıldı. Birçok Edit bileşeni TCustomEdit üzerinden türetilerek yapılır. Böylece, misal DevExpress bileşeni TcxEdit kullanarakta prosedürü çağırabilirsiniz. Yaz(TCustomEdit(TcxTextEdit1));
Prosedür içinde özellikle Edit.Clear() kullanılmadı. Zira bu özellik tüm Edit bileşenlerinde olmayabiliyor.
Kullanımı ise aşağıdaki gibi olacaktır.
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;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Yaz(Edit1);
end;
end.