View Full Version : آموزش: چک کردن تمام edit های موجود در یک فرم که خالی نباشند و visible باشند
SayeyeZohor
جمعه 02 خرداد 1393, 15:48 عصر
با سلام
این FUNCTION می تونه تمام edit هایی که قبل از post خالی هستند رو چک کنه و به کاربر هشدار بده
FUNCTION ValidateCustomEdit(AOwner: TComponent): Boolean;
var
I, J, K: Integer;
ACustomEdit: TcxCustomTextEdit;
BEGIN
Result := False;
J := 0;
K := 0;
FOR I := 0 to AOwner.ComponentCount - 1 DO
IF (AOwner.Components[I] IS TcxCustomTextEdit) AND (TcxCustomTextEdit(AOwner.Components[I]).Visible) THEN J := J + 1;
FOR I := 0 to AOwner.ComponentCount - 1 DO
BEGIN
IF (AOwner.Components[I] IS TcxCustomTextEdit) AND (TcxCustomTextEdit(AOwner.Components[I]).Visible) THEN
BEGIN
ACustomEdit := TcxCustomTextEdit(AOwner.Components[I]);
IF (Trim(ACustomEdit.Text) = '') THEN
BEGIN
ACustomEdit.SetFocus;
ACustomEdit.Style.Color := $00FFE0C1;
END
ELSE
BEGIN
ACustomEdit.Style.Color := clWhite;
K := K + 1;
END;
IF K = J THEN Result := True;
END;
END;
END;
یوسف زالی
جمعه 02 خرداد 1393, 23:13 عصر
سلام.
خیلی خوبه. یکم بهینه سازی لازم داره.
احتمالا j و k واسه دیباگ بوده جا مونده. For بالا اضافیه. اگر دارید SetFocus می کنید چرا پس از حلقه بیرون نپریدید؟
SayeyeZohor
جمعه 02 خرداد 1393, 23:54 عصر
احتمالا j و k واسه دیباگ بوده جا مونده
یعنی چی؟
For بالا اضافیه.
فک نکنم اضافی باشه ها
چون یک بار چک میکنم چند تا کامپوننت از نوع TcxCustomTextEdit وجود داره و تعداد آن رو در J دخیره میکنم
اگر دارید SetFocus می کنید چرا پس از حلقه بیرون نپریدید؟
فک کنم این قسمت رو میگین البته درسته می خواستم همه TcxCustomTextEdit هایی که خالی هستند یک جا آبی رنگ بشند حواسم به setfocus نبود
IF (Trim(ACustomEdit.Text) = '') THEN
BEGIN
ACustomEdit.SetFocus;
ACustomEdit.Style.Color := $00FFE0C1;
Break;
END
ذرست شد؟
یوسف زالی
شنبه 03 خرداد 1393, 10:02 صبح
این رو ببین:
type
TCheckEmptyFunc = function (Sender: TObject): boolean;
function CheckEmpty(Sender: TObject): boolean;
begin
if Sender is TEdit then
Result := TEdit(Sender).Text = '';
end;
procedure ContainerHasEmptyData(Container: TWinControl; ControlClass: TControlClass; CheckFunc: TCheckEmptyFunc; EmptyControls: TList);
var
i: integer;
begin
EmptyControls.Clear;
for i := 0 to Container.ControlCount -1 do
if Container.Controls[i] is ControlClass then
if CheckFunc(Container.Controls[i]) then
EmptyControls.Add(Container.Controls[i]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
lst: TList;
begin
lst := TList.Create;
ContainerHasEmptyData(Self, TEdit, CheckEmpty, lst);
if lst.Count > 0 then
ShowMessage('do some thing');
lst.Free;
end;
SayeyeZohor
شنبه 03 خرداد 1393, 19:45 عصر
با اجازه ات این تغییرات رو اعمال کردم
چون کامپوننت TcxCustomTextEdit رو نمی شناخت
Type
TCheckEmptyFunc = FUNCTION (Sender: TObject): Boolean;
FUNCTION CheckEmpty(Sender: TObject): Boolean;
BEGIN
IF Sender is TcxCustomTextEdit THEN Result := TcxCustomTextEdit(Sender).Text = '';
END;
PROCEDURE AOwnerHasEmptyData(AOwner: TComponent; CompClass: TComponentClass; CheckFunc: TCheckEmptyFunc; EmptyControls: TList);
var
i: integer;
BEGIN
EmptyControls.Clear;
FOR I := 0 to AOwner.ComponentCount -1 DO
BEGIN
IF AOwner.Components[I] IS CompClass THEN
IF CheckFunc(AOwner.Components[I]) THEN
EmptyControls.Add(AOwner.Components[I]);
END;
END;
procedure TF_KarfarmaPeymankarInfo.AeroBitBtn1Click(Sender: TObject);
var
lst: TList;
begin
lst := TList.Create;
AOwnerHasEmptyData(Self, TcxCustomTextEdit, CheckEmpty, lst);
IF lst.Count > 0 THEN
BEGIN
MessageDlg('کاربر گرامی ، لطفاً اطلاعات را کامل کنید', mtWarning, [mbOK], 0);
TcxCustomTextEdit(lst[0]).SetFocus;
lst.Free;
Exit;
END;
lst.Free;
END;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.