PDA

View Full Version : DBTreeView با امکان راست به چپ در Delphi



مهدی کرامتی
شنبه 23 دی 1385, 01:06 صبح
DBTreeView با امکان راست به چپ در Delphi


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


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

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

از طرف دیگر بعضی هاتون با Virtual Treeview (http://www.soft-gems.net/index.php?option=com_content&task=view&id=12&Itemid=33) آشنا هستید. این یکی راست به چپ رو بطور کامل پشتیبانی میکنه، اما
کار کردن باهاش سخته.
امکان اتصال به دیتابیس رو بطور پیش فرض نداره.بخاطر همین جماعت اکثرا بیخیالش میشن.

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

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


معرفی ابزار
من این مخلوق رو بطور خیلی اتفاقی کشف کردم: Dynamic DBTreeView controls v 1.9 (http://www.table-report.com/products.php)

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

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

دموی هایی که همراه این مجموعه (http://table-report.com/downloads/dbtreeview.zip) ارائه شده به اندازه کافی گویا و واضح هست.

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

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

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

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

kheyri
دوشنبه 25 دی 1385, 14:23 عصر
خوشبختانه با کمی تلاش بیشتر تونستم کامپوننت ها رو نصب کنم. باز هم ممنون بخاطر معرفی این کامپوننت.

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

Mojgan110
سه شنبه 26 دی 1385, 00:05 صبح
با تشکر از آقای اسیستنت بخاطر معرفی این کامپوننته .

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

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

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

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

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

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

http://m1.freeshare.us/127fs1413690_th.png (http://m1.freeshare.us/view/?127fs1413690.png)

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

مهدی کرامتی
سه شنبه 26 دی 1385, 19:36 عصر
یک نسخه ویژه استفاده از ADO هم در پکیج نصبش وجود داره.

devil00x
شنبه 14 بهمن 1385, 00:08 صبح
جناب 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
شنبه 14 بهمن 1385, 07:59 صبح
من اینجا دیدم که همه دوستان از راست به چپ شدن treeview صحبت می کنن ، من تابع دارم که هر کامپوننتی رو بهش بدی راست به چپش می کنه از جمله همین treeview امیدوارم که بدردتون بخوره.
این کد قبلا توسط خود آقای DelphiAssistant در این فوروم گذاشته شده بود و درباره اش بحث شده. ظاهرا در بعضی شرایط خاص نتایج قابل قبولی ارائه نمیده. فکر کنم یکیش استفاده از Popup Menu برای TreeView بود.

j_shokrzadeh
دوشنبه 31 اردیبهشت 1386, 16:28 عصر
سلام من یک مشکل در گرفتن text مجموعه یک شاخه و زیر شاخه هاش دارم اگر کمکم کنید ممنون میشم

FirstLine
جمعه 25 خرداد 1386, 09:21 صبح
با سلام
توی برنامه ADOTable دارم که DTADOTree1 را به آن وصل کرده ام و وقتی تنظیماتش رو ست میکنم فقط سطح اول والد را نشان میدهد و هیچ زیر مجموعه ای را نشان نمیدهد و سطح اول را هم درست نشان میدهد.
توی مجموعه اش دمو برای DTADOTree1 نبود تو سایتش هم ندیدم.
آیا کسی یه مثال یا دمو برای DTADOTree1 داره؟
یا اینکه چه تنظیماتی را باید اعمال کنم؟
با تشکر

مهدی کرامتی
جمعه 25 خرداد 1386, 10:35 صبح
بنظر من اشکال از داده های درون جدول تان است که رابطه ID/ParentID در آنها احتمالا درست نیست.

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

rmb_ali
پنج شنبه 21 تیر 1386, 13:22 عصر
از بابت این کامپوننت ممنون ولی من با ado که کار میکنم ووقتی میخوام یه فرزند ایجاد کنم روی دستور appen خطا میده و متنش اینه که میگه یه خطای ناشناخته رخ داده و برنامه روی یکی از خط های پروسیچر update میمونه ممنون میشم اگر راهنمایی کنید

shiva1359
دوشنبه 23 مهر 1386, 12:48 عصر
با سلام و تشکر آیا این برنامه رو با C# هم دارید؟

FirstLine
دوشنبه 07 آبان 1386, 17:00 عصر
با سلام
چجوری میشه با انتخاب یکی از رکوردها (فرزندان) در صورت داشتن والدین مسیر کلی را نمایش دهد؟ (یعنی مثلا بگوید علی پسر حسن پسر حسین و... تا روت اصلی)
با تشکر

MehdiRah
پنج شنبه 27 دی 1386, 14:14 عصر
سلام آقای کرامتی این کامپونت (Dynamic DBTreeView controls v 1.7) را چجوری به SDAC وصل کنم ممنون

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

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

FirstLine
یک شنبه 21 بهمن 1386, 10:30 صبح
با سلام
کمک کمک کمک کمک کمک کمک کمک کمک کمک ....
خیلی واجبه لطفا یه راهنمایی بفرمایید. برناغمه باید تا چهارشنبه آماده بشه......
با تشکر

مهدی کرامتی
یک شنبه 21 بهمن 1386, 13:27 عصر
فکر میکنم Virtual Treeview متدهایی برای پیدا کردن Parent یک Node داره، راهنمایش را مطالعه کنید.

FirstLine
دوشنبه 22 بهمن 1386, 00:53 صبح
با سلام
در 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
پنج شنبه 02 اسفند 1386, 08:16 صبح
با سلام
من نتونستم چیزی پیدا کنم.
لطفا راهنمایی کنید.
اگه یه تابعی باشه که همه ParentID های هر عنوان انتخابی را نشان دهد اون هم کارمو راه میندازه.
با تشکر

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

karzari
جمعه 17 خرداد 1387, 22:16 عصر
سلام من از bds 2006 استفاده میکنم اما این پکیج در این ورژن نصب نمیشه
آیا برای نصب این پکیج راهی هم وجود داره ؟

solook
یک شنبه 23 تیر 1387, 22:44 عصر
این موجود! با اسکرول افقی در حالت راست چین مشکل داره..

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

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

hamicom
شنبه 20 مهر 1387, 10:57 صبح
از بابت این کامپوننت ممنون.
یک باگ در این کامپوننت وجود دارد.در صورتی که در رویداد onKeyDown کدی نوشته شود این رویداد عمل نمی کند.

h_naeime
شنبه 09 آذر 1387, 09:26 صبح
سلام باتشکر از معرفی این کامپوننت من نیاز به نصب این ابزار روی دلفی 2009 دارم ولی خطا می گیره اگه امکان داره راهنمایی کنید.باتشکر

0armin0
جمعه 16 مهر 1389, 20:27 عصر
سلام دوستان. میدونم خیلی وقته از این مطلب میگذره ولی خیلی به این کامپوننت نیاز دارم.سایتش هم از کار افتاده:عصبانی++:.لطفا اگه دارید اینجا آپلود کنید ممنون