الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال بخصوص TreeView

بدأه ibukhari في 10 أغسطس 2010 · 8 رد · 997 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلاك عليكم ورحمة الله وبركاته

رمضان كريم

post-218426-028751400 1281444764_thumb.j

كيف لي ان أصنع مثل هذا المثل الذي في الصورة المرفقة

عند الضغط على TreeView يضهر المحتوى مع موقعة في النص

ارجو المساعدةpost-218426-052307100 1281445074_thumb.j

المرفقات
Untitled.jpgUnt itled.jpg

تم تعديل هذه المشاركة بواسطة ibukhari في 10 أغسطس 2010 في 16:01

#2

رمضان كريم

كود كالآتي قد يفي بالغرض

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
tmpNode:TTreeNode;
begin
  tmpNode:= treeview1.GetNodeAt(x,y);
  edit1.Text:='';
  while(tmpNode<>nil)do
  begin
    edit1.Text:=tmpNode.Text+edit1.Text;
    tmpNode:=tmpNode.Parent;
    if(tmpNode<>nil)then
      edit1.Text:='/'+edit1.Text;
  end;
end;

يمكن التعديل بما يتناسب مع المشكلة

#3
YaSeenTA كتب:

رمضان كريم

كود كالآتي قد يفي بالغرض

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
tmpNode:TTreeNode;
begin
  tmpNode:= treeview1.GetNodeAt(x,y);
  edit1.Text:='';
  while(tmpNode<>nil)do
  begin
    edit1.Text:=tmpNode.Text+edit1.Text;
    tmpNode:=tmpNode.Parent;
    if(tmpNode<>nil)then
      edit1.Text:='/'+edit1.Text;
  end;
end;

يمكن التعديل بما يتناسب مع المشكلة

شكراً لك من أعماق قلبي أخي الكريم وبارك الله فيك :) :)

لكن لدي سؤال ماذا لو إستخدم المستخدم لوحة المفاتيح ؟؟؟

تم تعديل هذه المشاركة بواسطة ibukhari في 11 أغسطس 2010 في 00:03

#4

تساؤل جيد , المعذرة لأني غفلت عنه ...

هذا كود يعتمد على الخاصية Selected التابعة لـ Treeview. جرب الكود و ضع أي ملاحظات ...

function GetNodePath(tmpNode:TTreeNode):string;
begin
  while(tmpNode<>nil)do
  begin
    result:=tmpNode.Text+result;
    tmpNode:=tmpNode.Parent;
    if(tmpNode<>nil)then
      result:='/'+result;
  end;
end;
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   Edit1.text:=GetNodePath(treeview1.Selected);
end;

procedure TForm1.TreeView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//if (key in [VK_UP, VK_DOWN,VK_LEFT,VK_RIGHT,VK_HOME,VK_END,VK_PRIOR,VK_NEXT,VK_TAB ])then
//  begin
    Edit1.text:=GetNodePath(treeview1.Selected);
//  end;
end;

ملحوظة : عليك تغيير الكود في حال كانت MultiSelect قيمتها True , حينها ستستخدم Selected.Item للحصول على جميع ال nodes المختارة ...(أترك هذه النقطة عليك)

===

سبب التعديل : الإستغناء عن الجملة الشرطية

تم تعديل هذه المشاركة بواسطة YaSeenTA في 11 أغسطس 2010 في 19:41

#5
YaSeenTA كتب:

تساؤل جيد , المعذرة لأني غفلت عنه ...

هذا كود يعتمد على الخاصية Selected التابعة لـ Treeview. جرب الكود و ضع أي ملاحظات ...

function GetNodePath(tmpNode:TTreeNode):string;
begin
  while(tmpNode<>nil)do
  begin
    result:=tmpNode.Text+result;
    tmpNode:=tmpNode.Parent;
    if(tmpNode<>nil)then
      result:='/'+result;
  end;
end;
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   Edit1.text:=GetNodePath(treeview1.Selected);
end;

procedure TForm1.TreeView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//if (key in [VK_UP, VK_DOWN,VK_LEFT,VK_RIGHT,VK_HOME,VK_END,VK_PRIOR,VK_NEXT,VK_TAB ])then
//  begin
    Edit1.text:=GetNodePath(treeview1.Selected);
//  end;
end;

ملحوظة : عليك تغيير الكود في حال كانت MultiSelect قيمتها True , حينها ستستخدم Selected.Item للحصول على جميع ال nodes المختارة ...(أترك هذه النقطة عليك)

===

سبب التعديل : الإستغناء عن الجملة الشرطية

والله مش عارف كيف أشكرك شكراً جزيلاً لك هذه أفضل طريقة .

لازم نتعرف على بعض أكثر شوف ملفك الشخصي انا بعتلك إيميلي وياريت تبعتلي إنت من وين ؟

#6

لدي سؤال آخر عن tree view إذا أمكن

post-218426-081049100 1281598755_thumb.j

post-218426-036847900 1281598771_thumb.j

post-218426-067081700 1281598792_thumb.j

تلاحظ أخي الكريم من الصور الثلاث انه إذا ضغط المستخدم على أي من الأحرف فإن البرنامج يقوم بتحديد مكان الحرف رقمياً مثلاً الرقم واحد يعني انه في القائمة الرئيسية دون أي تفرع و الرقم 2 يعني انه في التفرع الأول وهاكذا

[

المرفقات
1.jpg2.jpg3.jpg

تم تعديل هذه المشاركة بواسطة ibukhari في 12 أغسطس 2010 في 10:48

#7

المسألة ليست صعبة .فقط شوية تفكير وتعديل في آخر كود يمكنك عمل ما تريد .

في البداية نضف النوع الآتي ذكره ليشمل المعلومات المراد معرفتها (بامكانك إضافة أشياء أخرى مستقبلا)

type
PNodeInfo=^TNodeInfo;
TNodeInfo= record
  path:String;
  level:integer;
end;

ثم نعدل آخر كود ليصبح كالآتي:

function GetNodeInfo(tmpNode:TTreeNode):TNodeInfo;
begin
  result.level:=0;
  while(tmpNode<>nil)do
  begin
    result.path:=tmpNode.Text+result.path;
    inc(result.level);
    tmpNode:=tmpNode.Parent;
    if(tmpNode<>nil)then
      result.path:='/'+result.path;
  end;
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  nodeinfo:TNodeInfo;
begin
   nodeInfo:=GetNodeInfo(treeview1.Selected);
   Edit1.text:= nodeinfo.path;
   Edit2.Text:= inttostr(nodeInfo.level);
end;

procedure TForm1.TreeView1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  nodeinfo:TNodeInfo;
begin
   nodeInfo:=GetNodeInfo(treeview1.Selected);
   Edit1.text:= nodeinfo.path;
   Edit2.Text:= inttostr(nodeInfo.level);
end;

لاحظ التغيير الذي حدث وكيف تم إيجاد قيمة الـ level في جملة while ...

تم تعديل هذه المشاركة بواسطة YaSeenTA في 12 أغسطس 2010 في 16:46

#8

قبل أن تضع تساؤل سأضع لك سؤال كي تقوم بالمحاولة لعمل المطلوب (ستحتاج لمراجعة Delphi Help )

الشفرات السابقة تتعامل مع الـ selected node كما هو ملاحظ

كيف نظهر معلومات الـ node حين عمل إخفاء أو إظهار لأبناءها. أقصد عند الضغط على السهم او علامة + في الشجرة , لانه قد لايتم إختيارها في هذه الحالة أي أنها ليست selected node .

للتسهيل عملية الإخفاء تسمى collapse والإظهار تسمى expand ...

---

نقطة أخرى لا يتم فيها الإعتمدا على selected node , عند lلنقر بالزر اليمين للماوس على node ما ... (حاول في هذه أيضا )

#9

مشكور أخي الكريم على الحلول وجزاك الله خيراً

مواضيع مشابهة