![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Систем.мессага поверх всех окон [D7]
apihelp © (2004-05-10 16:10:00)Подскажите пожалуста как можно реализовать в коде что бы сервер который находится в скрытом состоянии мог выкинуть мессагу поверх всех окон да еще что бы она неперекрывалась окнами(попловок). Или проще. главной форме позволительно перекрыватся в вот второй форме, которую показывает главная, нужно быть поплавком. У меня неполучается, главная форма неперекрывает вторую а вот все остальные легко перекрывают их обеих.
proteste (2004-05-11 23:22:00) [1]Удалено модератором
Примечание: Выбирай выражения, иначе будешь только читать
apihelp (2004-05-11 23:04:00) [2]Удалено модератором
Примечание: Выражения выбирай, не в театре
apihelp (2004-05-11 15:17:00) [3]Удалено модератором
Примечание: Дубль
apihelp (2004-05-11 15:17:00) [4]Удалено модератором
Примечание: Дубль
apihelp (2004-05-11 15:15:00) [5]Удалено модератором
Примечание: Дубль
Style (2004-05-11 10:09:00) [6]Используй потоки
type
TMsgThread = class(TThread)
private
FCaption, FText: string;
FFlags: integer;
protected
procedure Execute; override;
public
constructor Create(Text,Caption: string; Flags: integer);
end;
implementation
{ TMsgThread }
constructor TMsgThread.Create(Text,Caption: string; Flags: integer);
begin
inherited Create(false);
FreeOnTerminate := True;
FCaption := Caption;
FText := Text;
FFlags := Flags;
end;
procedure TMsgThread.Execute;
begin
MessageBox(0,pchar(FText),pchar(FCaption),FFlags);
end;
procedure ShowModalMessage(msg: String);
begin
TMsgThread.Create(
'Message',Msg,MB_OK or MB_SYSTEMMODAL or MB_ICONINFORMATION);
end;
apihelp (2004-05-11 07:18:00) [7]>Игорь Шевченко ©
>Обычный MessageBox с флагом MB_SYSTEMMODAL спасет отца русской
>демократии.
Да, но прога то остановится до закрытия мессаги, а для сервера это не есть хорошо.
Игорь Шевченко (2004-05-10 23:56:00) [8]Обычный MessageBox с флагом MB_SYSTEMMODAL спасет отца русской демократии.
Nick Denry (2004-05-10 23:13:00) [9]MB_TOPMOST + (хотя можно и без него) MessageBoxIndirect:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var result : LONGBOOL;
MSGBIn : TMsgBoxParamsA;
res : integer;
begin
MSGBIn.cbSize := SizeOf(MSGBIn);
MSGBIn.hInstance := hInstance;
with MSGBIn do begin
hwndOwner := Form1.Handle;
lpszText := 'Do you really want to close application?';
lpszCaption := PChar(Form1.Caption);
dwStyle := MB_YESNO or MB_USERICON or MB_TOPMOST;
lpszIcon := MAKEINTRESOURCE(1001);
dwContextHelpId := 0;
lpfnMsgBoxCallback := nil;
end;
Res := MessageBoxIndirectA(MSGBIn);
if res = IDNO then CanClose := FALSE;
end;
Не идеал конечно, но должно работать...
Можно еще свое окно забачить, я когда еще Tooltip-baloon'ов небыло хинты свои писал. Полнофункциональные...
Nick Denry (2004-05-10 23:13:00) [10]Кстати, тут еще свой значок у мессагебокса...
apihelp (2004-05-10 23:10:00) [11]Да и еще проблема пока мессага активна программа не активна можно ли этого избежать? Думаю что нет. Поэтому наверное придется делать из формы муляж messagebox.
apihelp (2004-05-10 23:02:00) [12]MessageDlg('lylyly'и т.п.) - это конечно понятно.
Дело в том что Messagebox то кинуть не сложно , но нужно что бы он/оно был поверх всех окон. Вот с этим проблемы. Мне это видится так: нужно кинуть мессагу от Desktop'а а как это сделать?
В предидущем примере я переназначил родителя на Desktop. Но это решило проблему для формы, а как быть с messagebox?
Игорь Шевченко (2004-05-10 22:47:00) [13]
> что бы сервер который находится в скрытом состоянии мог
> выкинуть мессагу поверх всех окон да еще что бы она неперекрывалась
> окнами(попловок).
MessageBox ?
apihelp (2004-05-10 22:45:00) [14]Блин толи это настолько легко что никто не хотит подсказать толи никто незнает. Смотрел подобные темы везде только вопрос, а ответов х.
apihelp (2004-05-10 21:48:00) [15]Вобщем кое что удалось надумать уже получилось лучше, но как бы сделать так что бы от Desktop'а кинуть системную мессагу да так что бы она была всегда наверху?
unit Unit2;
....
procedure FormDeactivate(Sender: TObject);
private
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := GetDesktopWindow;
end;
procedure TForm2.FormDeactivate(Sender: TObject);
begin
with Form2 do
SetWindowPos(Handle, HWND_TOPMOST, 0, 0,
0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
end.