السلاك عليكم ورحمة الله وبركاته
رمضان كريم
كيف لي ان أصنع مثل هذا المثل الذي في الصورة المرفقة
عند الضغط على TreeView يضهر المحتوى مع موقعة في النص
السلاك عليكم ورحمة الله وبركاته
رمضان كريم
كيف لي ان أصنع مثل هذا المثل الذي في الصورة المرفقة
عند الضغط على TreeView يضهر المحتوى مع موقعة في النص
تم تعديل هذه المشاركة بواسطة ibukhari في 10 أغسطس 2010 في 16:01
رمضان كريم
كود كالآتي قد يفي بالغرض
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;يمكن التعديل بما يتناسب مع المشكلة
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
تساؤل جيد , المعذرة لأني غفلت عنه ...
هذا كود يعتمد على الخاصية 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
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 المختارة ...(أترك هذه النقطة عليك)
===
سبب التعديل : الإستغناء عن الجملة الشرطية
والله مش عارف كيف أشكرك شكراً جزيلاً لك هذه أفضل طريقة .
لازم نتعرف على بعض أكثر شوف ملفك الشخصي انا بعتلك إيميلي وياريت تبعتلي إنت من وين ؟
لدي سؤال آخر عن tree view إذا أمكن
تلاحظ أخي الكريم من الصور الثلاث انه إذا ضغط المستخدم على أي من الأحرف فإن البرنامج يقوم بتحديد مكان الحرف رقمياً مثلاً الرقم واحد يعني انه في القائمة الرئيسية دون أي تفرع و الرقم 2 يعني انه في التفرع الأول وهاكذا
[
تم تعديل هذه المشاركة بواسطة ibukhari في 12 أغسطس 2010 في 10:48
المسألة ليست صعبة .فقط شوية تفكير وتعديل في آخر كود يمكنك عمل ما تريد .
في البداية نضف النوع الآتي ذكره ليشمل المعلومات المراد معرفتها (بامكانك إضافة أشياء أخرى مستقبلا)
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
قبل أن تضع تساؤل سأضع لك سؤال كي تقوم بالمحاولة لعمل المطلوب (ستحتاج لمراجعة Delphi Help )
الشفرات السابقة تتعامل مع الـ selected node كما هو ملاحظ
كيف نظهر معلومات الـ node حين عمل إخفاء أو إظهار لأبناءها. أقصد عند الضغط على السهم او علامة + في الشجرة , لانه قد لايتم إختيارها في هذه الحالة أي أنها ليست selected node .
للتسهيل عملية الإخفاء تسمى collapse والإظهار تسمى expand ...
---
نقطة أخرى لا يتم فيها الإعتمدا على selected node , عند lلنقر بالزر اليمين للماوس على node ما ... (حاول في هذه أيضا )
مشكور أخي الكريم على الحلول وجزاك الله خيراً