Trong Delphi bạn có thể thay đổi chú thích của hộp thoại ShowMessage
vì theo mặc định nó đang lấy tên exe của tôi.Thay đổi chú thích và thuộc tính của hộp thoại ShowMessage
Và tôi có thể thay đổi màu nền, kích thước giống nhau không?
Trong Delphi bạn có thể thay đổi chú thích của hộp thoại ShowMessage
vì theo mặc định nó đang lấy tên exe của tôi.Thay đổi chú thích và thuộc tính của hộp thoại ShowMessage
Và tôi có thể thay đổi màu nền, kích thước giống nhau không?
Bạn có thể tạo hộp thoại tùy chỉnh của riêng mình bằng cách sử dụng chức năng CreateMessageDialog
của delphi.
Ví dụ dưới đây:
var
Dlg: TForm;
begin
Dlg := CreateMessageDialog('message', mtInformation, [mbOk], mbOK);
// Treat Dlg like any other form
Dlg.Caption := 'Hello World';
try
// The message label is named 'message'
with TLabel(Dlg.FindComponent('message')) do
begin
Font.Style := [fsUnderline];
// extraordinary code goes here
end;
// The icon is named... icon
with TPicture(Dlg.FindComponent('icon')) do
begin
// more amazing code regarding the icon
end;
Dlg.ShowModal;
finally
Dlg.Free;
end;
và tất nhiên bạn có thể chèn các thành phần khác là tốt vào hình thức mà năng động.
Hộp thoại sẽ sử dụng nội dung của Application.Title
làm phụ đề. Vì vậy, bạn có thể thiết lập điều này trước khi gọi ShowMessage
.
Tuy nhiên, nếu bạn muốn hiển thị nhiều hộp thoại với phụ đề khác nhau, sẽ thuận tiện hơn khi gọi hàm Windows MessageBox
. Chắc chắn nếu bạn có một phiên bản cũ của Delphi, điều này sẽ dẫn đến cảm giác bản địa hơn cho hộp thoại của bạn.
procedure MyShowMessage(const Msg, Caption: string);
begin
MessageBox(GetParentWindowHandleForDialog, PChar(Msg), PChar(Caption), MB_OK);
end;
function GetParentWindowHandleForDialog: HWND;
begin
//we must be careful that the handle we use here doesn't get closed while the dialog is showing
if Assigned(Screen.ActiveCustomForm) then begin
Result := Screen.ActiveCustomForm.Handle;
end else if Assigned(Application.MainForm) then begin
Result := Application.MainFormHandle;
end else begin
Result := Application.Handle;
end;
end;
Nếu bạn muốn kiểm soát màu sắc và kích thước thì tùy chọn hiển nhiên nhất là tạo hộp thoại của riêng bạn làm TForm
hậu duệ.
tôi không thể tìm thấy 'MianWindowHandle' trong BDS 2006 có biểu mẫu tùy chỉnh dưới dạng hộp thoại có vẻ là một tùy chọn – Shirish11
Tôi đã xác định sai. Đó là MainFormHandle trong Delphi. Tôi đang trả lời quá nhiều câu hỏi WinForms !!! –
nhưng nó vi phạm thuộc tính 'Showmodal' của' Showmessages' – Shirish11
Đây là một đoạn mã tôi đã viết, bạn có thể muốn sử dụng nó để ghi chú.
function SetHook(Code : Integer; wparam : Integer; LParam : Integer) : Longint; stdcall;
function HookWndProc(wnd : HWND ;uMsg : UINT; wParam : WPARAM; lParam : LPARAM) : LRESULT; stdcall;
var
CaptHook : HHOOK;
GHookProc : TFNWndProc;
GOldHookProc : TFNWndProc;
implementation
uses Messages, Types, Graphics;
function SetHook(Code : Integer; wparam : Integer; LParam : Integer) : Longint; stdcall;
var
pwp : CWPSTRUCT;
begin
if Code = HC_ACTION then
begin
pwp := CWPStruct(Pointer(LParam)^);
if pwp.message = WM_INITDIALOG then
begin
GOldHookProc := TFnWndProc(SetWindowLong(pwp.hwnd, GWL_WNDPROC, LongInt(GHookProc)));
end;
end;
result := CallNextHookEx(CaptHook, Code, wparam, lparam);
end;
function HookWndProc(wnd : HWND ;uMsg : UINT; wParam : WPARAM; lParam : LPARAM) : LRESULT;
var
DC : HDC;
WndRect : Trect;
BR: HBRUSH;
WndText : array[1..20] of char;
begin
result := CallWindowProc(GOldHookProc, wnd, uMsg, wParam, lParam);
if uMsg = WM_ERASEBKGND then
begin
GetWindowText(wnd, @wndText, 20);
//do stuff here (I colored the button red)
DC := GetDC(wnd);
WndRect := Rect(0, 0, 200,200);
BR := CreateSolidBrush(clRed);
FillRect(dc, WndRect, BR);
DeleteObject(BR);
ReleaseDC(wnd, dc);
end;
end;
...
đặt này trong Form của bạn Tạo nơi bạn muốn làm cho hộp thư sôi nổi
uses windows;
...
CaptHook := SetWindowsHookEx(WH_CALLWNDPROC, @SetHook, 0, GetCurrentThreadId);
GHookProc := @HookWndProc;
Vì vậy, điều này là móc vào các chức năng bật hộp thoại của Windows và bạn có thể lấy bối cảnh cho hộp thoại và vẽ lên đó.
Điều này có tác dụng gì? –
@ David Tôi đã phải viết điều này cho một ứng dụng nội bộ bởi vì một số người công nghệ ở đây muốn có các nút màu đỏ trên các thông điệp cảnh báo quan trọng. Về cơ bản nó là một cái móc có thể vẽ trên 'canvas' của hộp thoại bạn bật lên. Bạn có thể vẽ ở nơi có các bình luận. –
+1 Điều này dường như phù hợp nhất với những gì Shirish đang tìm kiếm –
@aldo cảm ơn ý tưởng – Shirish11
Tôi chưa bao giờ biết 'FindComponent' tồn tại. +1! –