Вверх ↑
Этот топик читают: nesco, Гость
Ответов: 69
Рейтинг: 1
#1: 2024-06-19 11:08:09 ЛС | профиль | цитата
Всех приветствую!

Рисую программу с применением динамических панелей PageControl на 2 уровня с программным (дистанционным) выбором по команде. Столкнулся с необычной проблемой связанной с отсутствием реакции на нажатие кнопки мыши на главной форме в любом месте, даже в верхней части с тремя кнопками. При простое, программа не нагружена ничем. Прерывания не используются в клиенте. Принцип: команда от клиента-серверу TCP -›ответ и наоборот.
Проблем не знал, пока не стал пытаться использовать дочерние формы ChildForm и ChildFormEx совместно с pagecontrol. (В примитивном примере-сборки до минимума-работает).
Стоит только отобразить их на главной форме и вывести текст дистанционно через TCP на HilightMemo, и закрыть окно ChildForm, то главная форма перестает реагировать на нажатие кнопки мыши, но при этом, курсор подсвечивает кнопки, подсказки т.д. Загрузки процессора - 0%. Стоит только свернуть и восстановить окно главной формы дистанционно, то все восстанавливается. Сборка HiAsm_4.05b186_AltBuild_v2050.28-11-15.01 , установлен мод RemoteAccessManager.
В Чем может быть проблема?

Редактировалось 5 раз(а), последний 2024-06-19 11:39:55
карма: 0

0
Ответов: 295
Рейтинг: 25
#2: 2024-06-19 12:30:51 ЛС | профиль | цитата
Схему в студию.
Будем дебажить.
карма: 2
0
Ответов: 69
Рейтинг: 1
#3: 2024-06-20 08:08:33 ЛС | профиль | цитата
Спасибо. Сам разобрался.
Добавил задержку не менее 300 мс между командами на отображения данных на форме Pagecontrol (с выбором страницы) и отображением формы ChildForm и данных на нем.
Причина решилась сразу. В случае с формой ChildFormEx - выскакивали ошибки с чтением (доступом) памяти по некому нулевому адресу.
карма: 0

0
Разработчик
Ответов: 26086
Рейтинг: 2124
#4: 2024-06-20 17:58:28 ЛС | профиль | цитата
Всем Привет! Я тут мимо проходил, но вопрос показался интересным. Неплохо бы все же глянуть на схемку. Если можно, конечно
карма: 22

0
Ответов: 2214
Рейтинг: 676
#5: 2024-07-04 15:16:09 ЛС | профиль | цитата
nesco писал(а):
Неплохо бы все же глянуть на схемку.

Вот к примеру такая схема у меня "блокирует" модальную дочернюю форму:
Add(MainForm,2953706,42,182)
{
Width=815
Height=655
Caption="test 1"
WindowsState=2
Point(Close)
}
Add(MTStrTbl,5800875,112,182)
{
Left=60
Top=120
Width=365
Height=240
Font=[MS Sans Serif,12,0,0,1]
Name="Table1"
Layout="ver_Table"
HeightScale=100
Columns=#7:1=54==2|7:2=50==2|5:3=400|5:4=100|5:5=120|5:6=120|7:7=90==2|3:8=0|
Grid=0
MultiSelect=0
Point(onMouseDown)
Point(doVisible)
link(onMouseDown,10963487:doEvent,[])
}
Add(IndexToChanel,10963487,154,210)
{
link(onEvent2,3533485:doEvent1,[])
}
Add(ArrayRW,6195194,280,210)
{
link(Array,7054046:Array,[])
}
Add(DoData,10226319,238,224)
{
Data=String(Добавить)
link(onEventData,6195194:doAdd,[])
AddHint(-25,51,75,13,Data)
}
Add(Hub,3533485,196,217)
{
OutCount=3
link(onEvent1,7054046:doClear,[(225,223)(225,174)])
link(onEvent2,10226319:doData,[])
link(onEvent3,7054046:doPopupHere,[(218,237)(218,167)])
}
Add(PopupMenuEx,7054046,273,161)
{
Font=[MS Sans Serif,12,0,0,1]
Bitmaps=[]
Point(Array)
link(MenuItemIdx,2300527:doShow,[])
}
Add(ChildFormEx,2300527,392,161)
{
}
BEGIN_SDK
Add(EditMultiEx,6167279,21,21)
{
WorkCount=#6:doShow|
Width=503
Height=557
link(doShow,3451375:doShowModal,[(119,27)(119,90)])
}
Add(MainForm,3451375,217,56)
{
Left=35
Top=105
Width=981
Height=727
Visible=1
Caption="test 2"
Position=1
Point(doShowModal)
}
Add(Button,14999685,266,504)
{
Left=250
Top=540
Width=110
Height=35
Font=[MS Sans Serif,12,0,0,1]
TabOrder=9
Layout="gor_buttons"
Caption="Отмена"
link(onClick,6311228:In,[(298,510)])
}
Add(HBoxLayout,16029822,308,427)
{
Name="gor_buttons"
Space=30
Padding=10
Layout="ver"
}
Add(LayoutSpacer,11853030,350,427)
{
Left=530
Top=540
Layout="gor_buttons"
WidthScale=50
}
Add(LayoutSpacer,8885556,266,427)
{
Left=130
Top=540
Layout="gor_buttons"
WidthScale=50
}
Add(VBoxLayout,13052431,308,378)
{
Name="ver"
}
Add(MTStrTbl,4197214,217,182)
{
Left=190
Top=65
Width=455
Height=140
Font=[MS Sans Serif,12,0,0,1]
Name="Table2"
Layout="ver"
Columns=#7:1=54==2|7:2=50==2|5:3=400|5:4=100|5:5=120|5:6=120|7:7=90==2|3:8=0|
Grid=0
Point(onMouseDown)
}
Add(LineBreak,11625429,168,77)
{
Caption="close"
link(Out,3451375:doClose,[])
Primary=[6311228,196,427]
}
END_SDK
Проверить: правой кнопкой мыши нажать на таблицу, выбрать "Добавить", в появившемся окне будут не активны все кнопки (включая верхний правый угол), пока не перейти к программе по Alt+Tab.

При этом штатный пример с дочерней модальной формой работает без проблем: HiAsm\Elements\delphi\Example\Forms\Forms.sha

HiAsm штатный rev 2407 win10 64

Редактировалось 1 раз(а), последний 2024-07-04 15:16:34
карма: 11

0
Ответов: 721
Рейтинг: 154
#6: 2024-07-04 18:54:17 ЛС | профиль | цитата
sla8a писал(а):
Вот к примеру такая схема у меня "блокирует" модальную дочернюю форму

Эффект блокировки модальной формы подтверждаю.
Мне кажется, что после вызова модальной формы из PopupMenu фокус остаётся на главной форме и на ней можно кликнуть правой кнопкой мыши ещё раз.
карма: 15

0
Разработчик
Ответов: 26086
Рейтинг: 2124
#7: 2024-07-04 19:19:53 ЛС | профиль | цитата
Всем Привет!
Вызывайте Меню в другой очереди событий. Перехват событий Меню действительно не отдает очередь в основное окно.
Схема


Add(MainForm,13529263,336,203)
{
Width=815
Height=655
Caption="test 1"
WindowsState=2
Point(Close)
}
Add(MTStrTbl,5800875,406,203)
{
Left=60
Top=120
Width=365
Height=240
Font=[MS Sans Serif,12,0,0,1]
Name="Table1"
Layout="ver_Table"
HeightScale=100
Columns=#7:1=54==2|7:2=50==2|5:3=400|5:4=100|5:5=120|5:6=120|7:7=90==2|3:8=0|
Grid=0
MultiSelect=0
Point(onMouseDown)
Point(doVisible)
link(onMouseDown,10963487:doEvent,[])
}
Add(IndexToChanel,10963487,448,231)
{
link(onEvent2,3533485:doEvent1,[])
}
Add(ArrayRW,6195194,574,231)
{
link(Array,7054046:Array,[])
}
Add(DoData,10226319,532,245)
{
Data=String(Добавить)
link(onEventData,6195194:doAdd,[])
AddHint(-25,51,75,13,Data)
}
Add(Hub,3533485,490,238)
{
OutCount=3
link(onEvent1,7054046:doClear,[(519,244)(519,195)])
link(onEvent2,10226319:doData,[])
link(onEvent3,5864827:doDeferredEvent,[(515,258)(515,272)(396,272)(396,153)])
}
Add(PopupMenuEx,7054046,567,182)
{
Font=[MS Sans Serif,12,0,0,1]
Bitmaps=[]
Point(Array)
link(MenuItemIdx,2300527:doShow,[])
}
Add(ChildFormEx,2300527,686,182)
{
}
BEGIN_SDK
Add(EditMultiEx,6167279,21,21)
{
WorkCount=#6:doShow|
Width=503
Height=557
link(doShow,3451375:doShowModal,[(158,27)(158,97)(207,97)(207,90)])
}
Add(MainForm,3451375,217,56)
{
Left=35
Top=105
Width=981
Height=727
Visible=1
Caption="test 2"
Position=1
Point(doShowModal)
}
Add(Button,14999685,266,504)
{
Left=250
Top=540
Width=110
Height=35
Font=[MS Sans Serif,12,0,0,1]
TabOrder=9
Layout="gor_buttons"
Caption="Отмена"
link(onClick,6311228:In,[(298,510)])
}
Add(HBoxLayout,16029822,308,427)
{
Name="gor_buttons"
Space=30
Padding=10
Layout="ver"
}
Add(LayoutSpacer,11853030,350,427)
{
Left=530
Top=540
Layout="gor_buttons"
WidthScale=50
}
Add(LayoutSpacer,8885556,266,427)
{
Left=130
Top=540
Layout="gor_buttons"
WidthScale=50
}
Add(VBoxLayout,13052431,308,378)
{
Name="ver"
}
Add(MTStrTbl,4197214,217,182)
{
Left=190
Top=65
Width=455
Height=140
Font=[MS Sans Serif,12,0,0,1]
Name="Table2"
Layout="ver"
Columns=#7:1=54==2|7:2=50==2|5:3=400|5:4=100|5:5=120|5:6=120|7:7=90==2|3:8=0|
Grid=0
Point(onMouseDown)
}
Add(LineBreak,6914353,168,77)
{
Caption="close"
link(Out,3451375:doClose,[])
Primary=[6311228,196,427]
}
END_SDK
Add(DeferredEvent,5864827,497,147)
{
link(onDeferredEvent,7054046:doPopupHere,[(557,153)(557,188)])
}

карма: 22

0
Ответов: 2214
Рейтинг: 676
#8: 2024-07-05 10:10:54 ЛС | профиль | цитата
nesco, а не получится внести правки в элемент чтоб избежать таких костылей, тут вопрос не во мне, а в том что не каждый будет знать где и когда нужно отложенное событие применить. А в данном случае как по мне и не логичное.

Тот же MenuEx отложенного события не требует, а один и тот же код с PopupMenuEx используют.

Add(MainForm,13529263,238,287)
{
Width=815
Height=655
Caption="test 1"
WindowsState=2
}
Add(ChildFormEx,2300527,329,287)
{
}
BEGIN_SDK
Add(EditMultiEx,6167279,21,21)
{
WorkCount=#6:doShow|
Width=503
Height=557
link(doShow,3451375:doShowModal,[(158,27)(158,97)(207,97)(207,90)])
}
Add(MainForm,3451375,217,56)
{
Left=35
Top=105
Width=981
Height=727
Visible=1
Caption="test 2"
Position=1
Point(doShowModal)
}
Add(Button,14999685,266,504)
{
Left=250
Top=540
Width=110
Height=35
Font=[MS Sans Serif,12,0,0,1]
TabOrder=9
Layout="gor_buttons"
Caption="Отмена"
link(onClick,6311228:In,[(298,510)])
}
Add(HBoxLayout,16029822,308,427)
{
Name="gor_buttons"
Space=30
Padding=10
Layout="ver"
}
Add(LayoutSpacer,11853030,350,427)
{
Left=530
Top=540
Layout="gor_buttons"
WidthScale=50
}
Add(LayoutSpacer,8885556,266,427)
{
Left=130
Top=540
Layout="gor_buttons"
WidthScale=50
}
Add(VBoxLayout,13052431,308,378)
{
Name="ver"
}
Add(MTStrTbl,4197214,217,182)
{
Left=190
Top=65
Width=455
Height=140
Font=[MS Sans Serif,12,0,0,1]
Name="Table2"
Layout="ver"
Columns=#7:1=54==2|7:2=50==2|5:3=400|5:4=100|5:5=120|5:6=120|7:7=90==2|3:8=0|
Grid=0
Point(onMouseDown)
}
Add(LineBreak,11823247,168,77)
{
Caption="close"
link(Out,3451375:doClose,[])
Primary=[6311228,196,427]
}
END_SDK
Add(MenuEx,9249265,280,287)
{
Menu=#1:1|1:2|1:3|
Bitmaps=[]
link(MenuItemIdx,2300527:doShow,[])
}
карма: 11

0
Разработчик
Ответов: 26086
Рейтинг: 2124
#9: 2024-07-05 15:43:05 ЛС | профиль | цитата
sla8a писал(а):
Тот же MenuEx отложенного события не требует, а один и тот же код с PopupMenuEx используют

MenuEx не требует запуска всплывающего окна, которое и перехватывает сообщения, не возвращая их обратно в форму. Боюсь, что это системные проблемы, а не компонента. Посмотрю, но не гарантирую, что удастся исправить. В конце концов, костыль все же имеется.
Кстати, отложенное событие надо использовать во многих случаях. Тот же doSetFocuse крайне желательно делать отложенным, а не вызывать его из общей очереди событий.

--- Добавлено в 2024-07-05 15:53:53

P.S. Кстати, а как ведет себя обычное, не EX, PopUpMenu. Не пробовали?

Редактировалось 2 раз(а), последний 2024-07-05 15:53:53
карма: 22

0
Ответов: 721
Рейтинг: 154
#10: 2024-07-05 16:44:41 ЛС | профиль | цитата
nesco писал(а):
Кстати, а как ведет себя обычное, не EX, PopUpMenu. Не пробовали?

Пробовал. Ведёт себя также. Модальная форма зависает.
карма: 15

0
Разработчик
Ответов: 26086
Рейтинг: 2124
#11: 2024-07-05 17:32:56 ЛС | профиль | цитата
Gunta писал(а):
nesco писал(а):
Кстати, а как ведет себя обычное, не EX, PopUpMenu. Не пробовали?

Пробовал. Ведёт себя также. Модальная форма зависает.


Значит это системная проблема. И находится минимум в Системной библиотеке KOL

--- Добавлено в 2024-07-05 18:02:12

Посмотрел детально код. Похоже, что проблема кроется выше, чем в KOL.
Для вызова всплывающего меню используется системный вызов TrackPopupMenu, который находится в системной библиотеке user32.dll. Похоже, что это в нем проблема

--- Добавлено в 2024-07-05 18:10:14

Тут только если попробовать прикрутить внутри кода отложенное событие к вызову метода TrackPopupMenu

--- Добавлено в 2024-07-05 18:22:50

Как будет время я подумаю над решением этого вопроса.

Редактировалось 5 раз(а), последний 2024-07-05 18:22:50
карма: 22

0
Разработчик
Ответов: 26086
Рейтинг: 2124
#12: 2024-07-06 23:53:54 ЛС | профиль | цитата
Всем Привет!
Кажется, я нашел наикратчайший способ реализации отложенного вызова всплывающего меню. Проверяйте, это пока исправления в обычном hiPopUpMenu
unit hiPopupMenu;

interface

uses Windows,Kol,Share,Messages,Debug;

const
US_APP = WM_APP + 1000;
US_DEFERREDEVENT = US_APP + 51;

type
THIPopupMenu = class(TDebug)
private
PM:PMenu;
FC:PControl;
Old:TOnMessage;
FMenuList: string;
ListMenuStr: array of string;
_Arr: PArray;

procedure SetMenu(const Value:string);
procedure AddMenuItem(const Caption:string);
// function _OnDraw( Sender: PObj; DC: HDC; const Rect: TRect; ItemIdx: Integer;
// DrawAction: TDrawAction; ItemState: TDrawState ): Boolean;
function _OnMes( var Msg: TMsg; var Rslt: Integer ): Boolean;
procedure RefBMP;
procedure RefBMPall;

procedure Init;
public
_prop_TranspIcon:boolean;
_event_onClick:THI_Event;
_event_onSelectStr:THI_Event;
_event_onEndPopup:THI_Event;
_data_Bitmaps:THI_Event;

property _prop_Menu: string write SetMenu;

constructor Create(Control:PControl);
destructor Destroy; override;
procedure _work_doPopup(var _Data:TData; Index:word);
procedure _work_doPopupHere(var _Data:TData; Index:word);
procedure _work_doAddItem(var _Data:TData; Index:word);
procedure _work_doClear(var _Data:TData; Index:word);
procedure _var_Handle(var _Data:TData; Index:word);

procedure _Add(var Val:TData);
procedure _Set(var Item: TData; var Val: TData);
function _Get(Var Item: TData; var Val: TData): boolean;
function _Count:integer;

procedure _var_Array (var _Data:TData; Index:word);

end;

implementation

constructor THIPopupMenu.Create;
begin
inherited Create;
FC := Control;
old := FC.OnMessage;
// PM := NewMenu(nil,0,[],nil);
end;

{$ifdef F_P}
var ListMenu: array[0..200] of PChar;
{$endif}

procedure THIPopupMenu.Init;
type TPCharArray = array[0..0] of PChar;
// PPCharArray = ^TPCharArray;
var i:integer;
List:PStrList;
{$ifndef F_P}
ListMenu: array of PChar;
{$endif}
//k:PPCharArray;
begin
List := NewStrList;
List.text := FMenuList;
if List.Count > 0 then
begin
SetLength(ListMenuStr,List.Count);
{$ifndef F_P}
SetLength(ListMenu,List.Count);
{$endif}
//getmem(k,4*10);
for i := 0 to List.Count-1 do
begin
ListMenuStr[i] := List.Items[i];
ListMenu[i] := PChar(@ListMenuStr[i][1]);
//k[i] := PChar(ListMenuStr[i]);
end;
end;
if Assigned(PM) then PM.free;
PM := NewMenu( nil, 0, ListMenu, nil );
List.free;
end;


(*
procedure THIPopupMenu.Init;
var List:PStrList;
i:integer;
begin
List := NewStrList;
List.text := _prop_Menu;
for i := 0 to List.Count-1 do
AddmenuItem(List.Items[i]);
List.Free;
end;
*)

destructor THIPopupMenu.Destroy;
begin
FC.OnMessage := old;
PM.Free;
inherited;
end;

function THIPopupMenu._OnMes;
var m:PMenu;
begin
case Msg.message of
WM_COMMAND: begin
m := PM.Items[Msg.WParam];
if m <> nil then begin
_hi_OnEvent(_event_onSelectStr,PM.Items[PM.IndexOf(m)].Caption);
_hi_OnEvent(_event_onClick,PM.IndexOf(m));
end;
end;
US_DEFERREDEVENT: begin
TrackPopupMenu(PM.Handle,0,Msg.WParam,Msg.LParam,0,FC.Handle,nil);
_hi_OnEvent(_event_onEndPopup);
end;
end;
Result := Old(Msg,Rslt);
end;

procedure THIPopupMenu.AddMenuItem;
begin
if Caption = '-' then
PM.AddItem('-',nil,[moSeparator])
else
PM.AddItem(PChar(Caption),nil,[]);
Refbmp;
end;

procedure THIPopupMenu.RefBMP;
var dt,Ind:TData;
bmp:PBitmap;
arr:PArray;
i,j:integer;
c:TColor;
begin
Arr := ReadArray(_data_Bitmaps);
if Arr = nil then exit;
Ind := _DoData(PM.Count-1);
Arr._Get(Ind,dt);
bmp := PBitmap(dt.idata);
if (_IsBitmap(dt)) and (bmp <> nil) and not bmp.Empty then begin
// BmpTransparent(bmp);
if _prop_TranspIcon then begin
c := Bmp.Pixels[0,0];
for i := 0 to Bmp.Width-1 do
for j := 0 to Bmp.Height-1 do
if Bmp.Pixels[i,j] = c then
// Bmp.Pixels[i,j] := clMenu;
Bmp.Pixels[i,j] := clNone;
end;
PM.Items[PM.Count-1].BitmapItem := CopyImage(bmp.Handle,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
end;
end;

procedure THIPopupMenu.RefBMPall;
var dt,Ind:TData;
bmp:PBitmap;
arr:PArray;
i,j,k:integer;
c:TColor;
begin
Arr := ReadArray(_data_Bitmaps);
if Arr = nil then exit;

for k := 0 to min(Arr._Count - 1, PM.Count - 1) do
begin
Ind := _DoData(k);
Arr._Get(Ind,dt);
bmp := PBitmap(dt.idata);
if (_IsBitmap(dt)) and (bmp <> nil) and not bmp.Empty then
begin
if _prop_TranspIcon then
begin
c := Bmp.Pixels[0,0];
for i := 0 to Bmp.Width-1 do
for j := 0 to Bmp.Height-1 do
if Bmp.Pixels[i,j] = c then
// Bmp.Pixels[i,j] := clMenu;
Bmp.Pixels[i,j] := clNone;
end;
PM.Items[k].BitmapItem := CopyImage(bmp.Handle,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
end;
end;
end;

procedure THIPopupMenu.SetMenu;
begin
FMenuList := Value;
Init;
FC.OnMessage := _OnMes;
end;

(*
function THIPopupMenu._OnDraw;
var bmp:PBitmap;
begin // debug('ok');
bmp := NewBitmap(0,0);
bmp.Handle := Pm.ItemBitmap[ItemIdx];
bmp.Draw(dc,1,Rect.Top);
//with PM.Items[PM.Count-1]^ do
// TextOut(dc,Rect.Left + 18,Rect.Top,PChar(Caption),Length(Caption));
bmp.Handle := 0;
bmp.Free;
Result := true;
end;
*)

procedure THIPopupMenu._work_doPopup;
var pos:cardinal;
begin
pos := Cardinal(ToInteger(_data));
RefBMPall;
PostMessage(FC.Handle, US_DEFERREDEVENT, pos and $ffff, pos shr 16);
// TrackPopupMenu(PM.Handle,0,pos and $ffff,pos shr 16,0,FC.Handle,nil);
// _hi_OnEvent(_event_onEndPopup);
end;

procedure THIPopupMenu._work_doAddItem;
begin
AddMenuItem(ToString(_Data));
end;

procedure THIPopupMenu._work_doClear;
begin
if Assigned(PM) then PM.Free;
PM := NewMenu(nil,200,[],nil);
end;

procedure THIPopupMenu._work_doPopupHere;
var pos:TPoint;
begin
GetCursorPos(pos);
SetForegroundWindow( FC.Handle );
RefBMPall;
with pos do
PostMessage(FC.Handle, US_DEFERREDEVENT, x, y);
// TrackPopupMenu(PM.Handle,0,x,y,0,FC.Handle,nil);
// _hi_OnEvent(_event_onEndPopup);
end;

procedure THIPopupMenu._var_Handle;
begin
dtInteger(_Data,PM.ItemHandle[0]);
end;

procedure THIPopupMenu._Set;
var
ind:integer;
begin
ind := ToInteger(Item);
if (ind < 0) and (ind > PM.Count - 1) then exit;
PM.ItemText[ind] := ToString(Val);
end;

function THIPopupMenu._Get;
var
ind: integer;
begin
ind := ToInteger(Item);
if (ind >= 0 ) and (ind < PM.Count) then
begin
dtString(Val, PM.ItemText[ind]);
Result := true;
end
else
Result := false;
end;

function THIPopupMenu._Count:integer;
begin
Result := PM.Count;
end;

procedure THIPopupMenu._Add;
var
sdt: string;
begin
sdt := ToString(Val);

if sdt = '-' then
PM.AddItem('-',nil,[moSeparator])
else
PM.AddItem(PChar(sdt),nil,[]);
Refbmp;
end;

procedure THIPopupMenu._var_Array;
begin
if _Arr = nil then
_Arr := CreateArray(_Set,_Get,_Count,_Add);
dtArray(_Data, _Arr);
end;

end.

Редактировалось 3 раз(а), последний 2024-07-07 00:00:54
карма: 22

2
Голосовали:sla8a, envoy_sky
Ответов: 2214
Рейтинг: 676
#13: 2024-07-07 10:35:06 ЛС | профиль | цитата
nesco, у меня тестирование прошло успешно, проблема блокировки окна пропала, новых проблем не замечено.
карма: 11

0
Ответов: 295
Рейтинг: 25
#14: 2024-07-07 14:56:16 ЛС | профиль | цитата
У меня тоже прошёл тест нормально.
Если без изменения провожу тест то нужно ещё раз нажать правую кнопку мыши и модальная форма отвисает.
карма: 2
0
Разработчик
Ответов: 26086
Рейтинг: 2124
#15: 2024-07-07 19:30:45 ЛС | профиль | цитата
Всем Привет!
Если все хорошо, то добавляю этот метод в Ех версию и добавлю на SVN. Для Патча сделаю отдельную версию, тк константа US_DEFERREDEVENT уже добавлена в Share.
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)