x11 Posted April 22, 2020 Share Posted April 22, 2020 Я заметил несколько ошибок. Чтобы не создавать несколько похожих тем, скину их сюда. 1. Есть фрейм на котором лежит сетка и она автообновляется. Вернее, каждый раз пересоздается DataSet. Взял себе в приложение из вашего примера "монитор сессий". По таймеру срабатывает процедура, во ее код: procedure TfrdSessions.GetSessions; var S : TUniGUISessions; U : TUniGUISession; I : Integer; PageControl: TUniPageControl; TabSheet: TUniTabSheet; begin cdsSessions.DisableControls; dsSessions.DataSet := nil; if cdsSessions.Active then cdsSessions.Close; // если вкладка неактивна, то не обновляем данные if self.Owner is TUniTabSheet then begin TabSheet := TUniTabSheet(self.Owner); if not Assigned(TabSheet) then exit; if TabSheet.Parent is TUniPageControl then begin PageControl := TUniPageControl(TabSheet.Parent); if PageControl.ActivePage <> TabSheet then begin TabSheet.Caption := constSessionsMsgTabCaption; exit; end; end;// if TabSheet.Parent is TUniPageControl then S := UniServerModule.SessionManager.Sessions; S.Lock; // Using Lock on session manager should be used with extreme care. // We should keep the "Lock duration" as short as we can. Session Manager stops working until lock is released. // Excessive use of lock/unlock or keeping the lock active for a long period will make uniGUI server slow/unresponsive. try SetLength(ASessionList, S.SessionList.Count); // Here we do a fast copy of list to another array for later use. for I := 0 to Pred(S.SessionList.Count) do begin U := S.SessionList[I]; ASessionList[I].ASessionId := U.SessionId; ASessionList[I].AIP := U.RemoteIP; ASessionList[I].ALastTime := U.LastTimeStamp; ASessionList[I].UserAgent := U.UserAgent; if Assigned(U.UniMainModule) then // Check mainModule availability. Some sessions may not have a MainModule instance begin ASessionList[I].ALogin := TUniMainModule(U.UniMainModule).SessionUserName; // Access custom MainModule props; ASessionList[I].ActiveForm := TUniMainModule(U.UniMainModule).SessionActiveForm; ASessionList[I].DeviceInfo := TUniMainModule(U.UniMainModule).SessionDeviceType; end; end; finally S.Unlock; // ... and finally don't forget to release lock! end; //cdsSessions.DisableControls; try cdsSessions.CreateDataSet; cdsSessions.EmptyDataSet; for I := Low(ASessionList) to High(ASessionList) do begin cdsSessions.Append; cdsSessions.FieldByName('sessionid').AsString := ASessionList[I].ASessionId; cdsSessions.FieldByName('ip').AsString := ASessionList[I].AIP; cdsSessions.FieldByName('lasttime').AsDateTime := ASessionList[I].ALastTime; cdsSessions.FieldByName('Login').AsString := ASessionList[I].ALogin; cdsSessions.FieldByName('ActiveForm').AsString := ASessionList[I].ActiveForm; cdsSessions.FieldByName('DeviceInfo').AsString := ASessionList[I].DeviceInfo; cdsSessions.FieldByName('UserAgent').AsString := ASessionList[I].UserAgent; cdsSessions.Post; end; if Assigned(TabSheet) then TabSheet.Caption := constSessionsMsgTabCaption; finally SetLength(ASessionList, 0); dsSessions.DataSet := cdsSessions; cdsSessions.EnableControls; // HideMask; end; end; end; После обновления исчезает меню "Столбцы" Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 Не получается закрыть это меню, пока не переоткроешь фрейм. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 Я так полагаю, проблема в том, что каждый раз пересоздается DataSet было cdsSessions.CreateDataSet; cdsSessions.EmptyDataSet; стало cdsSessions.Open; cdsSessions.EmptyDataSet; т.е. CreateDataSet; теперь только один раз при открытии фрейма. Но это не решило проблему. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 2. Вот ещё проблема. Если курсор мышки подвести к заголовку через привязанный к столбцу элемент фильтра (Combobox), то кнопка с выпадающим меню не появляется. Я понимаю, что это может быть проблема ExtJS. Но вы наверное имеете доступ к технической поддержке, к авторам этого фрейморка. Сообщите им, может они исправят эту проблему. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 3. Во время работы приложения в браузере нет столбца-индикатора. Проверяю свойства Options - индикатор включен. Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 21 minutes ago, x11 said: Во время работы приложения в браузере нет столбца-индикатора. Проверяю свойства Options - индикатор включен. Да к сожалению, dgIndicator не поддерживается в ExtJS. Но Вы можете использовать примерно такой подход: Или же использовать опцию dgRowNumbers... Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 2 minutes ago, Sherzod said: Да к сожалению, dgIndicator не поддерживается в ExtJS. Ок, понял. Спасибо за быстрый ответ. Вопрос вдогонку: а почему вы тогда не скроете подобные настройки из Диспетчера свойств? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 8 minutes ago, x11 said: Вопрос вдогонку: а почему вы тогда не скроете подобные настройки из Диспетчера свойств? Я открою запрос в портале поддержки. 1 Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 4. Включил тему Material. Все стало ОЧЕНЬ крупное. Но это не самая большая проблема. Теперь кнопки в заголовках всех таблиц частично не кликабельны, т.е. нет реакции на щелчок мышки, если щелкать по треугольнику. А если щелкать выше или ниже треугольника, то меню выпадает. Такая же проблему и у темы triton. Возможно и у других тем тоже есть. А пользователь будет щелкать именно на треугольник. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 5. Не знаю, записывать ли это в проблемы/ошибки. Но всё равно напишу здесь. Это, скорей, неудобство, а не ошибка. Столбцов у меня очень много. И меню на экран не вмещается. Приходится прокручивать. И вот проблема в том, что колесо мышки не работает для прокрутки. А вот эти кнопочки очень маленькие, неудобно попадать по ним мышкой. И неудобно тянуться то вверх экрана, то вниз экрана. Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 10 minutes ago, x11 said: Теперь кнопки в заголовках всех таблиц частично не кликабельны, т.е. нет реакции на щелчок мышки, если щелкать по треугольнику. Какой браузер используете? Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 2 minutes ago, x11 said: Столбцов у меня очень много. И меню на экран не вмещается. Приходится прокручивать. Это субменю Columns? Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 6 minutes ago, Sherzod said: Какой браузер используете? Firefox, win 10 x64 В Opera и Chrome такой проблемы не обнаружил Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 2 minutes ago, Sherzod said: Это субменю Columns? да Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 4 minutes ago, x11 said: Firefox, win 10 x64 В Opera и Chrome такой проблемы не обнаружил Да вижу, клик со второго раза. Quote Link to comment Share on other sites More sharing options...
Sherzod Posted April 22, 2020 Share Posted April 22, 2020 4 minutes ago, x11 said: 7 minutes ago, Sherzod said: Это субменю Columns? да Мы проанализируем. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 Just now, Sherzod said: клик со второго раза. В Firefox я много раз щелкаю по треугольнику - реакции нет вообще. Quote Link to comment Share on other sites More sharing options...
x11 Posted April 22, 2020 Author Share Posted April 22, 2020 6. Проблема с колонками - они появляются не на своем месте, перекрывают друг друга. Использую субменю "Столбцы". Т.к. gif большая, то я не буду прикреплять ее, и дам ссылку (см. на самый левый столбец): https://app.box.com/s/syuzar7dig5c53zfsf0wrtbpbx1sa3mx Я подозреваю, что проблема возникает после того, как я сохраняю настройки столбцов (в базу), затем восстанавливаю при открытии фрейма. Использую JSON. Какая-то путаница, наверное, с индексами. Может я неправильное событие использую для восстановления свойств столбцов. Для восстановления использую событие UniFrameCreate. Вот процедура восстановления, может кто-то здесь найдет проблему. procedure TStoreRestore.RestoreGridJSON(const json: string; grid: TUniDBGrid); Var v: TJSONValue; O: TJSONObject; i, idx: integer; u: TUniBaseDBGridColumn; sName: string; arr: TJsonValue; begin if json.IsEmpty or not Assigned(grid) then exit; v := TJSONObject.ParseJSONValue(json); try if v is TJSONObject then o := TJSONObject(v) else exit; if o.Count <= 0 then exit; for I := 0 to pred(o.Count) do begin sName := o.Pairs[i].JsonString.Value; arr := o.Pairs[i].JsonValue; //ищем колонку по FieldName u := grid.ColumnByName(sName); if not Assigned(u) then Continue; // "ID":[0,55,true,false] if arr is TJSONArray then begin if TJSONArray(arr).Count < 4 then continue; // индекс колонки idx := TJSONNumber(TJSONArray(arr).Items[0]).AsInt; // колонок может быть меньше, чем данных в настройках if grid.Columns.Count -1 >= idx then u.Index := idx ; u.Width := TJSONNumber(TJSONArray(arr).Items[1]).AsInt; u.Visible := TJSONBool(TJSONArray(arr).Items[2]).AsBoolean; u.Expanded:= TJSONBool(TJSONArray(arr).Items[3]).AsBoolean; end; end;// for finally v.Free; end; end; Может быть ещё какое-то свойство нужно сохранять и восстанавливать, чтобы столбцы становились на свои места? На всякий случай добавлю и процедуру получения настроек столбцов: function TStoreRestore.GetGridAsJSON(grid: TUniDBGrid): string; Var O: TJSONObject; arrIdx: TJSONArray; i: integer; begin if not Assigned(grid) then exit; o := TJSONObject.Create; try for I := 0 to pred(grid.Columns.Count) do begin arrIdx := TJSONArray.Create; arrIdx.AddElement(TJSONNumber.Create(grid.Columns[i].ColID)); arrIdx.AddElement(TJSONNumber.Create(grid.Columns[i].Width)); arrIdx.AddElement(TJSONBool.Create(grid.Columns[i].Visible)); arrIdx.AddElement(TJSONBool.Create(grid.Columns[i].Expanded)); o.AddPair(TJSONPair.Create(grid.Columns[i].FieldName, arrIdx)); end; result := o.ToJSON; finally o.Free; end; end; Quote Link to comment Share on other sites More sharing options...
x11 Posted May 10, 2020 Author Share Posted May 10, 2020 7. Проблема с TUniTreeList. Если на TUniHiddenPanel кинуть TUniTreeView, то будет AccessViolation при загрузке страницы http://forums.unigui.com/index.php?/topic/11079-filter-unidbgrid-runtime/&do=findComment&comment=77060 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.