Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2009, 23:34   #1
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию VirtualStringTree и редактирование текста ячейки

Как отредактировать название выделенной ячейки?

Создаю элементы дерева следующим способом:
Код:
//Заполнение дерева версий
begin
 VTVersion.Clear;
 VersionSL.Clear;
 QEx(QFPF1,'select Nazvanie from Version.db where ID_Proga in (select ID_Proga from Prog.db where nazvanie="'+ProgCB.Text+'") order by Nazvanie',False);
 If QFPF1.RecordCount>0 then
 for i:=0 to QFPF1.RecordCount-1 do
  begin
   VersionSL.Add(QFPF1.FieldByName('Nazvanie').AsString);
   VTVersion.AddChild(nil);
   QFPF1.Next;
  end;
 end;

procedure TProgForm.VTVersionGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
begin
CellText := VersionSL.Strings[(Integer(Node.Index))];
end;
И еще вопрос, когда я пытаюсь обновить дерево, то есть перестроить его заноВо, выскакивает ошибка, если там выделена ячейка, если же ячейка не выделена, то перестройка идет нормально.
Вопрос в том - как снять фокус с ячеек?
Шипулин А. В.

Последний раз редактировалось mihali4; 09.11.2009 в 01:06.
Шульц вне форума Ответить с цитированием
Старый 09.11.2009, 00:57   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Как отредактировать название выделенной ячейки?
VersionSL.Selected.Text:='aaa';
или вручную...
Цитата:
как снять фокус с ячеек?
Сделайте так:
VersionSL.Selected:=nil;
тогда будет снято и выделение, и фокус.

У меня, правда, этого компонента в Дельфи7 нету, я просто почитал про него...

Последний раз редактировалось mihali4; 09.11.2009 в 19:22.
mihali4 вне форума Ответить с цитированием
Старый 09.11.2009, 10:14   #3
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Ни то, ни другое не работает, так как у свойства Selected есть параметр типа Node.
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 09.11.2009, 16:58   #4
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Цитата:
Сообщение от Шульц Посмотреть сообщение
Вопрос в том - как снять фокус с ячеек?
Код:
VT.ClearSelection;
А если так ?

Последний раз редактировалось lexaltd; 09.11.2009 в 17:02.
lexaltd вне форума Ответить с цитированием
Старый 09.11.2009, 17:56   #5
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

А вот так, прекрасно работает
Остался теперь другой вопрос - как изменить запись в ячейке.
Я ее выбираю, затем в едит ввожу новое название, и затем нажимаю на кнопку, и после нажатия на кнопку должна изменится запись.
Как это сделать?
Шипулин А. В.

Последний раз редактировалось mihali4; 10.11.2009 в 12:31.
Шульц вне форума Ответить с цитированием
Старый 10.11.2009, 09:42   #6
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Цитата:
Сообщение от Шульц Посмотреть сообщение
А вот так, прекрасно работает
Остался теперь другой вопрос - как изменить запись в ячейке.
Я ее выбираю, затем в едит ввожу новое название, и затем нажимаю на кнопку, и после нажатия на кнопку должна изменится запись.
Как это сделать?
Навскидку где-то так (при условии что детей нет)

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  VersionSL.Strings[VTVersion.FocusedNode.Index] := Edit1.Text;
  VTVersion.Invalidate;
end;

Последний раз редактировалось mihali4; 10.11.2009 в 12:32.
lexaltd вне форума Ответить с цитированием
Старый 10.11.2009, 14:21   #7
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Набросал примерчик по этому поводу...
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, VirtualTrees;

type
  TNodeData = record
    st1: WideString;
    st2: WideString;
  end;

  PNodeData = ^TNodeData;

type
  TForm1 = class(TForm)
    VirtualStringTree1: TVirtualStringTree;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: string);
    procedure VirtualStringTree1NewText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; NewText: string);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    Data: PNodeData;
    Node: PVirtualNode;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  VirtualStringTree1.EditNode(VirtualStringTree1.FocusedNode, VirtualStringTree1.FocusedColumn);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  VirtualStringTree1.Header.Columns[1].Text := 'Проверка';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  VirtualStringTree1.NodeDataSize := SizeOf(TNodeData);
  Node := VirtualStringTree1.AddChild(nil);
  Data := VirtualStringTree1.GetNodeData(Node);

  Data^.st1 := 'ПРЕВЕД';
  Data^.st2 := 'МЕДВЕД!!!';
end;

procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);

begin
  Data := Sender.GetNodeData(Node);
  case Column of
    0: CellText := Data^.st1;
    1: CellText := Data^.st2;
  end;
end;

procedure TForm1.VirtualStringTree1NewText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; NewText: string);
begin
  Data := Sender.GetNodeData(Node);
  case Column of
    0: Data^.st1 := NewText;
    1: Data^.st2 := NewText;
  end;
end;
end.
Баламут вне форума Ответить с цитированием
Старый 10.11.2009, 19:30   #8
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

lexaltd, спасибо, помогло.
Только одно не понятно, что делает:

Код:
VTVersion.Invalidate;
Объясните, чем занимается данная функция, а то как то пользоваться и не знать - не правильно
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
редактирование текста в блокноте. Kio Помощь студентам 16 21.07.2008 17:02
Редактирование текста в Delphi Edo Помощь студентам 5 22.04.2008 08:18
задачка на техническое редактирование текста Милено4ка Паскаль, Turbo Pascal, PascalABC.NET 10 14.04.2008 09:17
Редактирование текста. Нужна помощь! quf Паскаль, Turbo Pascal, PascalABC.NET 3 12.04.2008 08:53
редактирование ячейки SveSve Microsoft Office Excel 2 11.04.2008 10:16