|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Дерево TTreeView при смене пользователя
Доброго всем времени суток!
Столкнулся с такой проблемой. Если дерево TTreeView невидимо, после выполнения смены пользователя Windows (не завершение сеанса) к элементам дерева невозможно обратиться программно. Вот весь код тестового приложения: Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls; type TForm1 = class(TForm) TreeView1: TTreeView; cbVisible: TCheckBox; Button1: TButton; procedure cbVisibleClick(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i:Integer; S:String; begin for i := 0 to TreeView1.Items.Count-1 do S:=S+#13+TreeView1.Items[i].Text; ShowMessage(S); end; procedure TForm1.cbVisibleClick(Sender: TObject); begin TreeView1.Visible:=cbVisible.Checked; end; end. Делаю так: 1. дерево невидимым (чекбокс) 2. смена пользователя и можно, не меняя, вернуться в эту же учетку 3. кнопка - пустое сообщение Если сделать то же самое с видимым деревом, то все нормально. Возможно, как-то Windows память пытается оптимизировать? Не знаю, подскажите, пожалуйста, что м.б. Спасибо! TreeTest.rar |
#2
|
||||
|
||||
Попробуйте в OnShow формы выполнить treeview1.realign или refresh
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
||||
|
||||
Это был плохой совет.
А если поставить птису в чекбокс при входе "невидимкой", инфа восстанавливается? Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 06.02.2014 в 14:29. |
#5
|
|||
|
|||
Цитата:
|
#6
|
||||
|
||||
Может тогда надо repaint (или просто банальный setfocus) в onshow делать, хотя у невидимого компонента это вероятно вызовет и ошибку
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
||||
|
||||
Цитата:
Как вариант могу предложить попробовать привыкнуть к компоненту Virtual Treeview - я с ним уже долго работаю, но так до конца не смог привыкнуть, хотя некоторые говорят что он наоборот удобнее чем стандартный TTreeView. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
BProg (07.02.2014)
|
#8
|
|||
|
|||
Цитата:
|
#9
|
|||
|
|||
Цитата:
Нет, сторонние не могу скорее всего использовать. Наверное придется переписать на что-то другое. |
#10
|
||||
|
||||
Цитата:
UPD Я же помню что как-то обходил этот глюк. Только что просмотрел свои старые проекты и в одном из них я использовал метод HandleNeeded, после которого все элементы опять становились доступными. Последний раз редактировалось poli-smen, 07.02.2014 в 10:57. |
#11
|
||||
|
||||
замени:
Код:
for i := 0 to TreeView1.Items.Count-1 do Код:
for i := 0 to TreeView_GetCount(TreeView1.Handle)-1 do либо на: Код:
TreeView1.HandleNeeded; for i := 0 to TreeView1.Items.Count-1 do при вызове "Сменить пользователя" и вход им же (всего один пользователь на компьютере) эффекта не наблюдается. но код: Код:
TreeView1.Parent:=nil; TreeView1.Parent:=Self; Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
BProg (11.02.2014)
|
#12
|
|||
|
|||
Цитата:
|
#13
|
||||
|
||||
впервые о такой бяке узнал из этой темы как уже писал выше, при смене пользователя у меня такого не возникает, а вот при удалении и восстановлении родителя проблема вылезла. можно покопаться в исходниках дерева и поискать проблему. будет время...
Пишу программы за еду. __________________ |
#14
|
|||
|
|||
Всем большое спасибо за помощь!
|