-
Постов
31 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Сообщения, опубликованные 伝説の
-
-
У меня ошибка пропадает если в x64 скомпилировать.
-
Стримерская программа OBS не захватывает FMX форму, если в ней включена прозрачность, как это исправить?
-
Как правильно изменять альфу (прозрачность) у цвета используя TAlphaTrackBar?
Например у TRectangle
Rectangle1.Fill.Color := ?
-
А есть способ как в Windows это сделать?
-
-
Получилось написать, работает на всех уровнях.
Экспорт
procedure ExportFromTreeView(Path: String; TreeView: TTreeView); var Generated: ISuperObject; Counter: Integer; I: TTreeViewItem; begin if not Assigned(TreeView) then Exit; { } TreeView.ExpandAll; Generated := SO('{"Data": []}'); { } for Counter := 0 to TreeView.GlobalCount - 1 do begin I := TreeView.ItemByGlobalIndex(Counter); Generated.A['Data'].Add(SO(['text', I.Text, 'level', I.Level])); end; { } Generated.SaveTo(path, True); end;
Импорт
procedure ImportToTreeView(Path: String; TreeView: TTreeView); var I, Last: TTreeViewItem; ImportData, S: ISuperObject; begin if not Assigned(TreeView) then Exit; ImportData := TSuperObject.ParseFile(Path, False); if not Assigned(ImportData) then Exit; { } TreeView.Clear; { } for S in ImportData['Data'] do begin I := TTreeViewItem.Create(nil); I.Text := S.S['text']; case S.I['level'] of 1: TreeView.AddObject(I); else begin if S.I['level'] > Last.Level then Last.AddObject(I) else if S.I['level'] = Last.Level then Last.ParentItem.AddObject(I) else Last.ParentItem.ParentItem.AddObject(I); end; end; Last := I; end; { } TreeView.ExpandAll; end;
P.S.Сорри за мой кодстайл, но думаю суть поймете.
-
Ну так я и пытаюсь универсальный способ написать...я показал пример, дальше по такой же схеме.
учтите что левелы нужно самому проверять.
чем больше вложенностей, тем больше будет левелов
-
вот так примерно
Мне кажется или в вашем коде что-то не так?...
-
кажется такой подход будет удобней
DATA - массив
{ "UPDATED":"", "DATA":[ { "ItemIndex":1, "text":"ITEM1", "parent":0 }, { "ItemIndex":2, "text":"ITEM1_SUB1", "parent":1 } ] }
Ну ок, а как из этого всего теперь дерево воссоздать в runtim'е?
-
покажи файл который получился
{"UPDATED": "","DATA": {"1": {"level": 1,"text": "ITEM1"},"2": {"level": 2,"text": "ITEM1_SUB1"},"3": {"level": 1,"text": "ITEM2"},"4": {"level": 2,"text": "ITEM2_SUB1"},"5": {"level": 2,"text": "ITEM2_SUB2"},"6": {"level": 2,"text": "ITEM2_SUB3"},"7": {"level": 2,"text": "ITEM2_SUB4"},"8": {"level": 1,"text": "ITEM3"}}} -
Собственно как это можно сделать?
P.S.
Сохранить то получается (с нужными данными), а вот как воссоздать дерево из файла уже всю голову сломал...
Как сохраняю:
Использую json (superobject), в цикле пробегаюсь по всем item'ам сохраняя их text и level.
-
Приходила такая идея в голову, но! WindowState всегда wsNormal.В принципе можно сделать так (совсем уж просто):
procedure TfmForm1.FormDeactivate(Sender: TObject); begin if fmMain.WindowState = TWindowState.wsMinimized then ShowMessage('Minimized'); end;
-
Все четно, даже поиск не помог.Думаю, что все должно быть как для VCL-приложений.
protected procedure WMSysCommand(var Msg:TMessage); message WM_SYSCOMMAND; procedure TfmForm1.WMSysCommand(var Msg:TMessage); begin if Msg.WParam=SC_MINIMIZE then begin ..... end else inherited; end;
не уверен, не пробовал, но "копать" - в том направлении.. -
Только под нее.
Тоже только под винду?Так, а как теперь отловить сворачивание приложения/формы?
-
Так, а как теперь отловить сворачивание приложения/формы?
-
т.е. Вы попробовали? или просто так.. по "наитию" пришли к такому выводу?
Блин, реально убирает, спасибо!
-
Попробуйте
uses {$IFDEF MSWINDOWS}, Winapi.Windows, FMX.Platform.Win{$ENDIF}; {$IFDEF MSWINDOWS} ShowWindow(ApplicationHWND, SW_HIDE); {$ENDIF}
Приложение просто свернется, толку...
-
Собственно как это можно сделать?
Не знаю как с VCL, но в FM этого сделать не получается.P.S.Windows 10, Delphi 10 Seattle.
-
Уже XE8 а они до сих пор его добавить не могут, что там за изверги там работают...
-
Неа, потому я тогда разницы и не увидел.P.S. если Вы правили исходник среды FM, то проблема с "расположением позади taskbar" так же должна исчезнуть. Проверьте.
-
Мне долго объяснять что это даст, если Вы не понимаете как ведет себя среда FM. Я лучше подскажу как решить проблему иначе, не изменяя исходников вообще:
1. Убрать при создании формы операцию nTrayIcon1.Show;
2. Добавить таймер с интервалом минимум 10 мс
3. В событии тамера: nTrayIcon1.Show -> Отключаем таймер.
Всё. Проверил - работает.
Блииин, как же я сразу об этом не подумал... кстати таймер не обязателен, главное этот код не в OnCreate а в OnShow выполнять и все.
А вот на этом огромное спасибо, главную проблему решили таким простым способом =)
-
Нужно:
procedure TnTrayIcon.Show; begin mHWND := FmxHandleToHWND((Self.Owner as TForm).Handle); <<< ---------- ApplicationHWND; mPopUpMenu := nTrayMenu; mIndent := nIndent; .....................
Вот это:mHWND := FmxHandleToHWND((Self.Owner as TForm).Handle);
Изменить на это:mHWND := ApplicationHWND;
И что это дает?
upd
Пардон туплю, иконка в трее работать теперь стала (с прозрачной формой).
-
А что с кодом компонента? нечего править не нужно?В самый раз для тех, у кого версия среды совпадает с моей... Этот способ не пройдет. Сделайте это сами, вот ссылка на решение.
-
Пока в FM нет возможности "из коробки" вытащить Handle Application наружу - это не возможно. Можно модифицировать самому исходник, и я могу вписать функцию в исходник компонента, но тогда он будет работать только у тех, у кого модифицирован исходник FM юнита. Это не есть хорошо.
Нет проблем, модифицируйте исходник, скомпилируйте его (в release [x32, x64], debug [x32, x64]), и выложите сюда dcu файлы.
Пользователю всего лишь останется их закинуть в C:\Program Files (x86)\Embarcadero\Studio\14.0\lib и там в соответствующие папки (предварительно сделав бэкпак оригинальных), для временного решения в самый раз.
Экспорт в файл/импорт из файла.
в TTreeView
Опубликовано
Спасибо, на тот момент видимо под мою задачу я это не учитывал...