Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дублируется строка в Virtual TreeView, глюк Virtual TreeView 
:(
    Опции темы
sinys
  Дата 12.8.2009, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 30.1.2007

Репутация: -1
Всего: -1



Глюк с Virtual Treeview (версия 4.8.5, делфи 7, ос ХР):
  После перерисовки дерева (возможно из-за вложенности) последняя строка дублируется при наведении курсора на неё или свободную область. 
  Чтобы было понятнее снял видео.
Подскажите как лечится, очень надо.

Вот код рисования дерева и перетаскивания на всякий случай, возможно ошибка в них:
Код

procedure TFrmSprPopUp.DrawFWDTree;
var
  iPos : Integer;
  Data : PFWDData;
  NewNode, ParentNode : PVirtualNode;
  s : String;
begin
  with VTFWD do
    begin
      BeginUpdate;
      Clear;
      s := AnsiUpperCase(RV.GetCurrentItemText);
      with O_FRAMEWORK_DICTIONARY do
        begin
          First;
          while not Eof do
            begin
              if FieldByName('PARENT_FWD').IsNull then
                ParentNode := nil
              else
                begin
                  while Assigned(NewNode) and  (FieldByName('PARENT_FWD').AsInteger <> PFWDData(VTFWD.GetNodeData(NewNode)).ID_FWD) do
                    NewNode := NewNode.Parent;
                  ParentNode := NewNode;
                end;

              NewNode := AddChild(ParentNode);
              Data := VTFWD.GetNodeData(NewNode);
              with Data^ do
                begin
                  ID_FWD   := FieldByName('ID_FWD').AsInteger;
                  NAME     := FieldByName('NAME').AsString;
                  HINT_FWD := FieldByName('HINT_FWD').AsString;
                end;
              NewNode.CheckType := ctCheckBox;

              iPos := Pos(AnsiUpperCase(Data^.NAME), s);

              if iPos > 0 then
                begin
                  NewNode.CheckState := csCheckedNormal;

                  ParentNode := NewNode.Parent;
                  while Assigned(ParentNode) and (ParentNode <> RootNode) and Assigned(GetNodeData(ParentNode)) do
                    begin
                      ParentNode.States := ParentNode.States + [vsExpanded];
                      ParentNode := ParentNode.Parent;
                    end;
                  ParentNode := nil;
                  
                  System.Delete(s, iPos, Length(Data^.NAME) + 1);
                end;  
              Next;
            end;
        end;
      EndUpdate;
    end;
  Application.ProcessMessages;
end;

procedure TFrmSprPopUp.VTFWDDragDrop(Sender: TBaseVirtualTree;
  Source: TObject; DataObject: IDataObject; Formats: TFormatArray;
  Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
  procedure DetermineEffect;
  begin
    if Shift = [] then
    begin
      if Source = Sender then
        Effect := DROPEFFECT_MOVE
      else
        Effect := DROPEFFECT_COPY;
    end
    else begin
        if Shift = [ssCtrl] then
          Effect := DROPEFFECT_COPY
        else
          Effect := DROPEFFECT_MOVE;
    end;
  end;
var
  RePaintTree : Boolean;
  i : Integer;
  Attachmode : TVTNodeAttachMode;
  Nodes : TNodeArray;
begin
  Nodes := nil;
  // Translate the drop position into an node attach mode.
  case Mode of
    dmAbove:
      AttachMode := amInsertBefore;
    dmOnNode:
      AttachMode := amAddChildLast;
    dmBelow:
      AttachMode := amInsertAfter;
  else
    AttachMode := amNowhere;
  end;

  if DataObject = nil then
    //
  else
    begin
      if Source is TBaseVirtualTree then
        DetermineEffect
      else
        if Boolean(Effect and DROPEFFECT_COPY) then
          Effect := DROPEFFECT_COPY
        else
          Effect := DROPEFFECT_MOVE;

      InsertData(Sender as TVirtualStringTree, DataObject, Formats, Effect, AttachMode);
    end;

  RePaintTree := False;
  Nodes := (Sender as TVirtualStringTree).GetSortedSelection(True);
  if Length(Nodes) > 0 then
    for i := 0 to Length(Nodes) - 1 do
      with O_FRAMEWORK_DICTIONARY do
        if Locate('ID_FWD', PFWDData(Sender.GetNodeData(Nodes[i])).ID_FWD, []) then
          begin
            Edit;
            if Sender.DropTargetNode = nil then
              begin
                RePaintTree := True;
                FieldByName('PARENT_FWD').Clear;
              end
            else
              FieldByName('PARENT_FWD').AsInteger := PFWDData(Sender.GetNodeData(Sender.DropTargetNode)).ID_FWD;
            Post;
          end;
  if RePaintTree then
    DrawFWDTree;
end;


Это сообщение отредактировал(а) sinys - 12.8.2009, 10:40

Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  ErrorVirtualTreeView.rar 462,09 Kb
PM MAIL   Вверх
sinys
Дата 17.8.2009, 05:46 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 30.1.2007

Репутация: -1
Всего: -1



up!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0888 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.