Arsip: Penggunaan Virtual Tree View

 
user image
more 15 years ago

eena

[color=blue:5bf35900c3][/color:5bf35900c3] Gimana cara nambah node pake virtual tree view???
user image
more 15 years ago

deLogic

maksudnya VirtualTreeView buatan Mike Lischke itu yah.. yang ada di SoftGems..?? heheh emang dibalik kecepatannya, VST itu 'nyleneh' . di Root:

  VST.RootNodeCount := VST.RootNodeCount + JumlahNodeTambahan;
di Child:

  VST.ChildCount := VST.ChildCount + JumlahNodeTambahan;
  VST.Expanded := True;
  VST.InvalidateToBottom(VST.FocusedNode);
jangan lupa berikan nilai pada method InitNode dan GetText. Untuk lebih jelasnya coba lihat contoh yg disertakan, terutama dalam folder Minimal.
user image
more 15 years ago

eena

Ya, VirtualTreeView yg dari SoftGems. Klo gak salah yg difolder minimal, waktu aplikasi dijalankan pertama kali, ada 20 node. Klo ditambah node-nya untuk root atau sebagai child, baru jumlahnya nambah. Tapi klo aplikasi ditutup dan dijalankan lagi node2 tsb gak ada(alias hilang). Lalu bagaimana cara ngasih node untuk level 2 atau 3 dan ngasih text untuk level tersebut, yang langsung muncul waktu awal aplikasi dijalankan???
user image
more 15 years ago

deLogic

Tapi klo aplikasi ditutup dan dijalankan lagi node2 tsb gak ada(alias hilang).
hem.. ini aneh, saya tidak pernah menemuinya, setiap saya tutup dan jalankan kembali exe-nya, pasti yg node muncul adalah jumlah default, yaitu 20node pada root.
Lalu bagaimana cara ngasih node untuk level 2 atau 3 dan ngasih text untuk level tersebut, yang langsung muncul waktu awal aplikasi dijalankan???
intinya ada di InitChildren. untuk ngasih text, tergantung dari struktur VirtualNode Anda dan pada method GetText. Coba Anda pelajari example yg disertakan... memang butuh kesabaran, saya aja pas pertama kali coba, juga 'bingung' kok. :) ini ada contoh pada salah satu aplikasi saya. saya sertakan tiga method, yaitu InitNode, InitChildren dan GetText.

procedure TfrmMain.vstCodeSnippetInitNode(Sender: TBaseVirtualTree;
  ParentNode, Node: PVirtualNode;
  var InitialStates: TVirtualNodeInitStates);
var
  RecStruct : PNavigationStruct;
  Image     : TBitmap;
begin
  RecStruct := Sender.GetNodeData(Node);
  if (ParentNode = nil) then
  begin
    with dmMain.IBTableLanguage do
    begin
      RecStruct.ID := Fields[DB_INDEX_LANG_ID].AsInteger;
      RecStruct.Highlighter := TAvailableHighlighter(
        Fields[DB_INDEX_LANG_HIGHLIGHT].AsInteger - 1);
      RecStruct.Name := Fields[DB_INDEX_LANG_NAME].AsString;
      if not Fields[DB_INDEX_LANG_ICON].IsNull then
      begin
        Image := TBitmap.Create;
        Image.Assign(Fields[DB_INDEX_LANG_ICON]);
        RecStruct.ImgIndex := imglstNavigation.Add(Image, nil);
        Image.Free;
      end;
      if not Eof then Next;
    end;
  end;
  Include(InitialStates, ivsHasChildren);
end;
procedure TfrmMain.vstCodeSnippetGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  RecStruct : PNavigationStruct;
begin
  RecStruct := Sender.GetNodeData(Node);
  CellText := RecStruct.Name;
end;
procedure TfrmMain.vstCodeSnippetInitChildren(Sender: TBaseVirtualTree;
  Node: PVirtualNode; var ChildCount: Cardinal);
var
  ParentStruct : PNavigationStruct;
  ChildStruct  : PNavigationStruct;
  ChildNode    : PVirtualNode;
  Level        : Integer;
begin
  Level := Sender.GetNodeLevel(Node);
  ParentStruct := Sender.GetNodeData(Node);
  case Level of
    0 : begin
          with dmMain.IBQuery do
          begin
            SQL.Text := 'SELECT  FROM V_BROWSE_CATEGORY_LITE'
                      + ' WHERE (CAT_LANGUAGE = ' + IntToStr(ParentStruct.ID)
                      + ') AND (CAT_PARENT = 0)';
            Open;
            First;
            while not EOF do
            begin
              ChildNode := Sender.AddChild(Node);
              ChildStruct := Sender.GetNodeData(ChildNode);
              ChildStruct.ID := Fields[DB_INDEX_VBROWSECAT_ID].AsInteger;
              ChildStruct.Highlighter := ParentStruct.Highlighter;
              ChildStruct.Name := Fields[DB_INDEX_VBROWSECAT_NAME].AsString;
              ChildStruct.StructType := STRUCT_CATEGORY;
              Sender.ValidateNode(Node, False);
              Next;
            end;
            Close;
          end;
          ChildCount := Sender.ChildCount[Node];
        end;
    else
      begin
          with dmMain.IBQuery do
          begin
            if (ParentStruct.StructType = STRUCT_CATEGORY) then
            begin
              // look for available categories
              SQL.Text := 'SELECT   FROM V_BROWSE_CATEGORY_LITE'
                        + ' WHERE CAT_PARENT = ' + IntToStr(ParentStruct.ID);
              Open;
              First;
              while not EOF do
              begin
                ChildNode := Sender.AddChild(Node);
                ChildStruct := Sender.GetNodeData(ChildNode);
                ChildStruct.ID := Fields[DB_INDEX_VBROWSECAT_ID].AsInteger;
                ChildStruct.Highlighter := ParentStruct.Highlighter;
                ChildStruct.Name := Fields[DB_INDEX_VBROWSECAT_NAME].AsString;
                ChildStruct.StructType := STRUCT_CATEGORY;
                Sender.ValidateNode(Node, False);
                Next;
              end;
              Close;
              // look for available code snippets
              SQL.Text := 'SELECT * FROM V_BROWSE_CODE_LITE'
                        + ' WHERE COD_CATEGORY = ' + IntToStr(ParentStruct.ID);
              Open;
              First;
              while not EOF do
              begin
                ChildNode := Sender.AddChild(Node);
                ChildStruct := Sender.GetNodeData(ChildNode);
                ChildStruct.ID := Fields[DB_INDEX_VBROWSECOD_ID].AsInteger;
                ChildStruct.Highlighter := ParentStruct.Highlighter;
                ChildStruct.Name := Fields[DB_INDEX_VBROWSECOD_NAME].AsString;
                ChildStruct.StructType := STRUCT_SNIPPET;
                Sender.ValidateNode(Node, False);
                Next;
              end;
              Close;
            end;
          end;
          ChildCount := Sender.ChildCount[Node];
      end;
  end;
  if ChildCount > 0 then
    Sender.Sort(Node, 0, sdAscending, True);
end;
user image
more 10 years ago

babypigs

saya sangat tertarik dengan komponen virtual treeview ini, setelah saya lihat banyak sekali kemampuan dari komponen ini dan yang penting gratis. saya sudah mulai mempelajari komponen virtual treeview ini. pertamanya saya kira tidak jauh berbeda dari treeview standar bawaan delphi, tapi makin lama semakin banyak perbeda, dan setelah saya perhatikan dari contoh2 di google yang saya dapat, ternyata kita perlu membuat beberapa prosedur bantu untuk menjalankan virtual treeview ini. untuk membuat node parent dan node child sudah saya kuasai, nah yang menjadi sedikit masalah mungkin buat yang lain ini terlihat simple dan mudah cuma untuk saya yang pemula menggunakan virtual treeview ini salah satu masalah yang bikin program saya mentok tidak bisa maju dalam beberapa hari ini. masalah yang ingin saya tanyakan bagaimana memberi atau menganti nama node-node (dalam bentuk text atau string) pada virtual treeview, saya sudah pelajari dari contoh di atas tapi terlalu rumit untuk dimengerti dan terlihat kurang lengkap karena ada variabel yang tipe tidak diketahui. referensi dari hasil pencarian di google juga sama saja terlalu rumit untuk dimengerti. sebelumnya saya ucapkan terimakasih ...
user image
more 10 years ago

DelphiExpert

Seingat saya di event GetNodeText atau GetTextNode :o
more ...
  • Pages:
  • 1
Share to

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com