با سلام
من این کد رو چند وقت پیش نوشتم برای یک همچین کاری . استفاده از همچین کدی میتونه مزیت های مختلفی مثل کاهش حجم نرم افزار و عدم استفاده از کامپوننت و ... داشته باشه . همچنین میتونید موارد مورد نیازتون رو تغییر بدید :
function MBMessageBox(iText, iCaption :string; iType : UINT):Integer;
const MSG_MWIDTH = 500;
MSG_BTNW = 100;
MSG_BTNH = 30;
MSG_BTNS = 7; //Button Space
MSG_SPC = 15;
MSG_OK = 'تایید';
MSG_CANCEL = 'انصراف';
MSG_YES = 'بله';
MSG_NO = 'خیر';
MSG_IGNOR = 'مهم نیست';
MSG_RETRY = 'تلاش مجدد';
MSG_ABORT = 'بیخیال';
var Frm :TForm;
btnTop :Integer;
tmpLeft :Integer;
procedure CreateButton(btnCap :string; cModal :TModalResult);
begin
with TButton.Create(Frm) do begin
Parent:= Frm;
Caption:= btnCap;
ModalResult:= cModal;
SetBounds(tmpLeft, btnTop, MSG_BTNW, MSG_BTNH);
tmpLeft:= tmpLeft + MSG_BTNW + MSG_BTNS;
end;
end;
begin
Frm:= TForm.Create(Application);
with Frm do begin
BiDiMode:= bdRightToLeft; //for right to left lang
Caption:= iCaption;
Position:= poMainFormCenter;
BorderStyle:= bsDialog;
Color:= clWindow;
end;
with TLabel.Create(Frm) do begin
Parent:= Frm;
WordWrap:= True;
Width:= MSG_MWIDTH;
Constraints.MaxWidth:= MSG_MWIDTH;
Constraints.MinWidth:= (MSG_BTNW * 4);
Caption:= iText;
Frm.ClientWidth:= Width + (MSG_SPC * 2);
Top:= (MSG_SPC);
Left:= Frm.ClientWidth - Width - MSG_SPC;
btnTop:= Top + Height + (MSG_SPC * 2);
end;
with TShape.Create(Frm) do begin
Parent:= Frm;
Align:= alBottom;
Height:= MSG_BTNH + (MSG_SPC * 2);
Pen.Style:= psClear;
Brush.Color:= clBtnFace;
end;
case iType of
MB_OK:
begin
tmpLeft:= (Frm.ClientWidth div 2) - (MSG_BTNW div 2);
CreateButton(MSG_OK, mrOk);
end;
MB_OKCANCEL:
begin
tmpLeft:= (Frm.ClientWidth div 2) - (MSG_BTNW + (MSG_BTNS div 2));
CreateButton(MSG_OK, mrOk);
CreateButton(MSG_CANCEL, mrCancel);
end;
MB_ABORTRETRYIGNORE:
begin
tmpLeft:= (Frm.ClientWidth div 2) - ((MSG_BTNW + (MSG_BTNW div 2)) + MSG_BTNS);
CreateButton(MSG_ABORT, mrAbort);
CreateButton(MSG_RETRY, mrRetry);
CreateButton(MSG_IGNOR, mrIgnore);
end;
MB_YESNOCANCEL:
begin
tmpLeft:= (Frm.ClientWidth div 2) - ((MSG_BTNW + (MSG_BTNW div 2)) + MSG_BTNS);
CreateButton(MSG_YES, mrYes);
CreateButton(MSG_NO, mrNo);
CreateButton(MSG_CANCEL, mrCancel);
end;
MB_YESNO:
begin
tmpLeft:= (Frm.ClientWidth div 2) - (MSG_BTNW + (MSG_BTNS div 2));
CreateButton(MSG_YES, mrYes);
CreateButton(MSG_NO, mrNo);
end;
MB_RETRYCANCEL:
begin
tmpLeft:= (Frm.ClientWidth div 2) - (MSG_BTNW + (MSG_BTNS div 2));
CreateButton(MSG_RETRY, mrRetry);
CreateButton(MSG_CANCEL, mrCancel);
end;
end;
Frm.ClientHeight:= btnTop + MSG_BTNH + MSG_SPC;
Result:= Frm.ShowModal;
Frm.Free;
end;
موفق و پیروز باشید