# Native Code > برنامه نویسی در Delphi > مقالات مرتبط با Delphi/Win32 >  DBTreeView با امکان راست به چپ در Delphi

## مهدی کرامتی

*DBTreeView با امکان راست به چپ در Delphi*


*سطح مقاله:* حرفه ای.

*
مقدمه*
خیلی از ماها در پروژه هامون به یک DBTreeView خوب نیازمندیم و با خودمون آرزو میکردیم کاش این کامپوننت فرضی قابلیت نمایش راست به چپ را هم پشتیبانی میکرد.

گزینه هایی که اکثرا میشناسید عبارتند:Express DBTreeDream Treeو چند تای دیگه.اما هیچ کدوم از اینها راست به چپ را پشتیبانی نمیکنند.

از طرف دیگر بعضی هاتون با Virtual Treeview آشنا هستید. این یکی راست به چپ رو بطور کامل پشتیبانی میکنه، اماکار کردن باهاش سخته.امکان اتصال به دیتابیس رو بطور پیش فرض نداره.بخاطر همین جماعت اکثرا بیخیالش میشن.

نبود اون چیزی که لازم داشتم باعث شد دست به کار بشم تا ترکیبی از Virtual Treeview و اتصال خودکار به دیتابیس رو بعنوان یک کامپوننت بنویسم. کمی هم روش کار کردم، تا جاهای خوبی هم کار رو پیش بردم، اما؛

بی اطلاع بودن از وجود بعضی چیزها دو دلیل میتونه داشته باشه:یا ما سعی نکردیم اون چیز رو پیدا کنیم و یا درباره اش اطلاع کسب کنیم، بعبارت دیگه تلاش کافی نکرده ایم (در مورد اکثر کسانی که در اطرافم میشناسم این قضیه صادقه).ایجاد کننده اون چیز به اندازه کافی برای معرفی کارش تلاش نکرده، بخاطر همین ناشناخته مونده.بعد از مدتی کار بر روی موردی که چند خط بالاتر ذکر کردم دریافتم دوست دیگری در گوشه ای دیگر از جهان که احتمالا خلوت هم هست کاری رو که من میخواستم انجام بدم انجام داده، اونم بطور تمام و کمال. 


*معرفی ابزار*
من این مخلوق رو بطور خیلی اتفاقی کشف کردم: Dynamic DBTreeView controls v 1.9

این کامپوننت یک پوسته روی Virtual Treeview محسوب میشه و کار کردن با اون، بخصوص متصل کردنش به دیتابیس رو خیلی راحت میکنه.
برای استفاده از اون کافیه یک نمونه از این کامپوننت رو بر روی فرم تان بیاندازید، چند تا مشخصه (که تحت یک مشخصه بنام DBTreeFields گروه بندی شده اند) رو مقداردهی کنید، و بروید دنبال کارتان.

از نکات جالب این ابزار میتوان به همزمان بودن حرکت روی شاخه های درخت و جابجایی رکورد با توجه به رکورد فعال در درخت (و برعکس)، قابل ویرایش عنوان رکورد در درخت، و امکان Drag & Drop شاخه های درخت و عوض شدن ParentID با توجه به پدر جدید شاخه در درخت اشاره کرد.

دموی هایی که همراه این مجموعه ارائه شده به اندازه کافی گویا و واضح هست.

امیدوارم از من نخواهید قدم به قدم توضیح بدم این دقیقا چطوری کار میکنه، و یک کم از هوش تان برای بکار گرفتن این ابزار استفاده کنید.

یک تصویر نیز بعنوان گواه به پایین این مطلب چسبیده است.

*نیمه شب خوبی داشته باشید.*

----------


## kheyri

جناب DelphiAssistant خیلی ممنون از مطالبی که فرمودید و من هم واقعاً بهش احتیاج داشتم و دانلودش کردم. ولی از اونجا که من کم تجربه هستم با اینکه راهنمای نصب رو خوندم نتونستم این کامپوننت رو نصب کنم ، خواستم خواهش کنم که در مورد نصب این کامپوننت توضیح بدید. مثل اینکه قبل از نصب DBTREEVIEW باید کامپوننت TREEVIEW نصب بشه و صحبت از کامپوننت Designtime شده که کمی موضوع رو پیچیده کرده. ممنون میشم راهنمایی بفرمائید.

----------


## kheyri

خوشبختانه با کمی تلاش بیشتر تونستم کامپوننت ها رو نصب کنم. باز هم ممنون بخاطر معرفی این کامپوننت.

----------


## kheyri

جناب DelphiAssistant با سلام مجدد. بعد از نصب کامپوننتها ، خواستم دموی برنامه رو اجرا کنم ولی با این ارور مواجه شدم :
کد :
{$I DTDBTree.Inc}
و خطای کمپایلر
[Fatal Error] Unit1.pas(5): File not found: 'DTDBTree.Inc'
میشه بفرمائید مشکل کار من کجاست؟

----------


## Mojgan110

با تشکر از آقای اسیستنت بخاطر معرفی این کامپوننته .

من نصبیدمش ، دموهاش هم تستیدم ! No Problem داشتم !

واسه همین ، مراحل نصب و ایناش را که آقای اسیستنت وقت نکرده بودند توضیح بدهند ، من مینویسم . تنکس بدید ! من خیلی تنکس دوست دارم .
--------------------------------------------------------------
1- مسیر Folan\VirtualTreeView\Source را به مسیر لایبرری های دلفی اضافه کنید ( از منوی تولز .. انوایرومنت آپشنز ، لایبرری و ... )

2- حالا پکیج VirtualTreesD7D را که در مسیر Folan\VirtualTreeView\Delphi هستش را دبل داخل دلفی باز کنید و دکمه های Compile و سپس Install را بزنید .

3- حالا پکیج DTTreeviewD7D را از مسیر Folan\DynamicDBTreeView\Delphi باز کنید و آنرا کامپایل و سپس اینستال کنید .

4- همین دیگه ! نصب شد !

5- مثلا یکی از دموهاش :

----------


## kheyri

خیلی ممنونم Mojgan110 . خدا بهت خیر بده. نصبش کردم و مشکلم حل شد. ولی خواستم با ADOTable  باهاش کار کنم بهم ارور داد و گفت دیتا ست باید از نوع TTable باشه در حالیکه دیتاست من از نوع  TADOTable هست. میشه راهنمائی کنی که این مشکل رو چطور میشه حل کرد؟

----------


## مهدی کرامتی

یک نسخه ویژه استفاده از ADO هم در پکیج نصبش وجود داره.

----------


## devil00x

> جناب DelphiAssistant خیلی ممنون از مطالبی که فرمودید و من هم واقعاً بهش احتیاج داشتم و دانلودش کردم. ولی از اونجا که من کم تجربه هستم با اینکه راهنمای نصب رو خوندم نتونستم این کامپوننت رو نصب کنم ، خواستم خواهش کنم که در مورد نصب این کامپوننت توضیح بدید. مثل اینکه قبل از نصب DBTREEVIEW باید کامپوننت TREEVIEW نصب بشه و صحبت از کامپوننت Designtime شده که کمی موضوع رو پیچیده کرده. ممنون میشم راهنمایی بفرمائید.


من اینجا دیدم که همه دوستان از راست به چپ شدن treeview صحبت می کنن ، من تابع دارم که هر کامپوننتی رو بهش بدی راست به چپش می کنه از جمله همین treeview امیدوارم که بدردتون بخوره.
ببخشید به علت اینکه اینجا مطرخ شده بود من کد رو همینجا می ذارم.

procedure SetWinControlBiDi(Control: TWinControl);
var
 ExStyle: Longint;
begin
 ExStyle := GetWindowLong(Control.Handle, GWL_EXSTYLE);
 SetWindowLong(Control.Handle, GWL_EXSTYLE, ExStyle or WS_EX_RTLREADING or WS_EX_RIGHT
   or WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT );
end;

----------


## vcldeveloper

> من اینجا دیدم که همه دوستان از راست به چپ شدن treeview صحبت می کنن ، من تابع دارم که هر کامپوننتی رو بهش بدی راست به چپش می کنه از جمله همین treeview امیدوارم که بدردتون بخوره.


این کد قبلا توسط خود آقای DelphiAssistant در این فوروم گذاشته شده بود و درباره اش بحث شده. ظاهرا در بعضی شرایط خاص نتایج قابل قبولی ارائه نمیده. فکر کنم یکیش استفاده از Popup Menu برای TreeView بود.

----------


## j_shokrzadeh

سلام من یک مشکل در گرفتن text مجموعه یک شاخه و زیر شاخه هاش دارم اگر کمکم کنید ممنون میشم

----------


## FirstLine

با سلام
   توی برنامه  ADOTable  دارم که DTADOTree1 را به آن وصل کرده ام و وقتی تنظیماتش رو ست میکنم فقط سطح اول والد را نشان میدهد و هیچ زیر مجموعه ای را نشان نمیدهد و سطح اول را هم درست نشان میدهد.
   توی مجموعه اش دمو برای DTADOTree1 نبود تو سایتش هم ندیدم.
   آیا کسی یه مثال یا دمو برای DTADOTree1 داره؟ 
   یا اینکه چه تنظیماتی را باید اعمال کنم؟
با تشکر

----------


## مهدی کرامتی

بنظر من اشکال از داده های درون جدول تان است که رابطه ID/ParentID در آنها احتمالا درست نیست.

----------


## FirstLine

با سلام
   رابطه ID/ParentID در آنها درست است و برای اطمینان بیشتر یه جدول جدید با 10 تا رکورد درست کردم ولی باز هم همان سطح اول را نمایش میدهد.
    برای نمایش فرزندان تنظیم خاصی نیاز است؟
    در تنظیمات DTADOTree گزینه HasChildrenFieldName چی هست و برای چی استفاده میشود؟
    لطفا یه مثال برای Adotable  کنید.
با تشکر

----------


## rmb_ali

از بابت این کامپوننت ممنون ولی من با ado  که کار میکنم ووقتی میخوام یه فرزند ایجاد کنم روی دستور appen خطا میده و متنش اینه که میگه یه خطای ناشناخته رخ داده و برنامه روی یکی از خط های پروسیچر update میمونه ممنون  میشم اگر راهنمایی کنید

----------


## shiva1359

با سلام و تشکر آیا این برنامه رو با C#‎ هم دارید؟

----------


## FirstLine

با سلام
  چجوری میشه با انتخاب یکی از رکوردها (فرزندان) در صورت داشتن والدین مسیر کلی را نمایش دهد؟ (یعنی مثلا بگوید علی پسر حسن پسر حسین و... تا روت اصلی)
با تشکر

----------


## MehdiRah

سلام آقای کرامتی این کامپونت (Dynamic DBTreeView controls v 1.7) را چجوری به SDAC وصل کنم ممنون

----------


## برنامه نویس مبتدی دلفی

{$I DTDBTree.Inc}
و خطای کمپایلر
[Fatal Error] Unit1.pas(5): File not found: 'DTDBTree.Inc'
با سلام بنده نیز این مشکل را دارم و با حتی با رعایت روش نصب کامپوننت این مشکل حل نشد لطفا راهنمایی فرمایید

----------


## FirstLine

با سلام
  چجوری میشه با انتخاب یکی از رکوردها (فرزندان) در صورت داشتن والدین مسیر کلی را نمایش دهد؟ (یعنی مثلا بگوید علی پسر حسن پسر حسین و... تا روت اصلی)
  یه کد برای Tree معمولی وجود داره که برای این کامپوننت کار نمیکنه. 
  البته اگه امکان این وجود داشته باشه که کل ParentID های هر فرزندی را نشان بده خیلای بهتره.
  لطفا راهنمایی بفرمایید
با تشکر

----------


## FirstLine

با سلام
  کمک   کمک   کمک   کمک   کمک   کمک   کمک   کمک   کمک   ....
  خیلی واجبه لطفا یه راهنمایی بفرمایید. برناغمه باید تا چهارشنبه آماده بشه......
با تشکر

----------


## مهدی کرامتی

فکر میکنم Virtual Treeview متدهایی برای پیدا کردن Parent یک Node داره، راهنمایش را مطالعه کنید.

----------


## FirstLine

با سلام
  در tree معمولی با کد زیر میشه کل parent ها رو نمایش داد اما من توی رانماش هم گشتم نتونستم این مورد را پیدا کنم.
  لطفا راهنمایی بفرمایید.
  وی اینکه یه کدی که بتوان تمام ارتباطات را در یک جدول جدید اضافه کرد.

 function SrNodeTree(pTreeNode: TTreeNode; var sRuta: string): string;
begin
  sRuta := pTreeNode.Text + ' > ' + sRuta;
  if pTreeNode.Level = 0 then Result := sRuta
  else
    Result := SrNodeTree(pTreeNode.Parent, sRuta);
end;

با تشکر

----------


## FirstLine

با سلام
  من نتونستم چیزی پیدا کنم.
  لطفا راهنمایی کنید.
  اگه یه تابعی باشه که همه ParentID های هر عنوان انتخابی را نشان دهد اون هم کارمو راه میندازه.
با تشکر

----------


## مهدی کرامتی

در این کامپوننت وقتی روی یک Node می روید رکورد مربوطه نیز در دیتابیس فعال میشود و شما میتوانید ParentID رکورد کنونی را از دیتابیس و رکوردی که اکنون فعال است بخوانید. بقیه عملیات نیز از طریق دیتابیس قابل انجام است (بدست آوردن سلسله مراتب).

----------


## karzari

سلام من از bds 2006 استفاده میکنم اما این پکیج در این ورژن نصب نمیشه 
آیا برای نصب این پکیج راهی هم وجود داره ؟

----------


## solook

این موجود! با اسکرول افقی در حالت راست چین  مشکل داره..

مشکلش اینه 
مثلا شاخه  فرزندی که نسبت به دیگر شاخه طولانی تر باشه((که در نتیجه باعث فعال شدن اسکرول افقی میشه ))اگه در لیست درختی موجود باشه به محض اینکه اون رو باز میکنم می پره به اتنهای اون نوشته جوری که اگه بخواهی برگردی سرشاخه اصلی رو ببینی باید اسکرول رو برگردونی به عقب
این مشکل در حالت چپ چین نیست اما وقتی راست چین میشه این مشکله داره..

حالا راه حلی براش هست؟

----------


## hamicom

از بابت این کامپوننت ممنون. 
یک باگ در این کامپوننت وجود دارد.در صورتی که در رویداد onKeyDown کدی نوشته شود این رویداد عمل نمی کند.

----------


## h_naeime

سلام باتشکر از معرفی این کامپوننت من نیاز به نصب این ابزار روی دلفی 2009 دارم ولی خطا می گیره اگه امکان داره راهنمایی کنید.باتشکر

----------


## 0armin0

سلام دوستان. میدونم خیلی وقته از این مطلب میگذره ولی خیلی به این کامپوننت نیاز دارم.سایتش هم از کار افتاده :خیلی عصبانی: .لطفا اگه دارید اینجا آپلود کنید ممنون

----------

