![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго всем времени суток!
Столкнулся с такой проблемой. Если дерево 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
|
|||
|
|||
|
Всем большое спасибо за помощь!
|