View Full Version : BiDimode در dbgrid
jafari1
یک شنبه 04 اردیبهشت 1384, 23:18 عصر
با سلام
میخواهم یکی از ستون های dbgrid که کلا righttoleft تعریف شده را lefttoright کنم
لطفا راهنمایی فرمایید
دنیای دلفی
سه شنبه 06 اردیبهشت 1384, 19:40 عصر
روی Dbgrid دابل کلیک کن ستون مورد نظر را انتخاب کن بعد برای اون جهتش را مشخص کن .
:D
jafari1
دوشنبه 12 اردیبهشت 1384, 00:11 صبح
دوست عزیز
لطفا خودتان کاری را که گفتید انجام دهید متوجه خواهید شد که چنین چیزی که میگویید وجود ندارد
vcldeveloper
دوشنبه 12 اردیبهشت 1384, 01:59 صبح
لطفا خودتان کاری را که گفتید انجام دهید متوجه خواهید شد که چنین چیزی که میگویید وجود ندارد
از خاصیت Alignment ستون مورد نظر استفاده کن.
Cave_Man
یک شنبه 20 آبان 1386, 09:25 صبح
من هم دقیقا همین مشکل رو دارم ولی با این موردی که آقای کشاورز گفتن مشکل من حل نمیشه باید فقط RightToLeft بشه
در Ehlib این مورد برای هر ستون وجود داره یعنی میشه BidiMode رو تنظیم کرد ولی انگار که این BidiMode برای قشنگی گذاشته شده و کار نمیکنه
راه حل در DBGrid یا DBGridEh چیست؟
لطفا کمک کنید
A.Nemati
یک شنبه 20 آبان 1386, 15:51 عصر
من این کار رو در مورد StringGrid انجام دادم. شاید این کمکت کنه
procedure Grid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
begin
...
Canvas.TextFlags:= Canvas.TextFlags and not ETO_RTLREADING;
if BiDiMode=bdRightToLeft then
X:= ARect.Right
else
X:= ARect.Left;
Application.ProcessMessages;
Canvas.TextRect(ARect, X, ARect.Top+ 5, TStringGrid(Self).Cells[ACol, ARow]);
end;
Cave_Man
یک شنبه 20 آبان 1386, 16:21 عصر
کد شما رو روی StringGrid تست کردم اما با خطاهای مکرر AV روبرو شدم
روی DBGrid هم امتحان کردم اما جواب نگرفتم
ممکنه کل کد رو به همراه عکس قسمتی از برنامه خودتون رو بزارید ؟
dkhatibi
یک شنبه 20 آبان 1386, 20:26 عصر
روی dbgrid دوبار کلیک کنید. همه ی فیلدها را اضافه کنید و فرموده ی آقای کشاورز را به کار گیرید.
Cave_Man
دوشنبه 21 آبان 1386, 09:42 صبح
اون موردی که آقای کشاورز گفتن Alignment هست ولی من مورد احتیاجم BidiMode هست.با این وجود این موردی که آقای کشاورز گفتن رو تست کردم ولی با BidiMode فرق میکنه نتیجش.
A.Nemati
دوشنبه 21 آبان 1386, 14:04 عصر
متاسفانه من چند روزیه که بدجوری با کمبود وقت مواجهم ولی سعی میکنم تا یکی دو روز دیگه یه نمونه خوب برات بزارم. البته اگه خودت کمی کلنجار بری میتونی بنویسیش ولی به هر حال من سعی میکنم تا فردا پس فردا برات یک نمونه بنویسم
Cave_Man
دوشنبه 21 آبان 1386, 17:20 عصر
مرسی من منتظرم
اگه به درستی کار کنه خیلی عالی میشه چون خیلی ها با این مورد مشکل دارن
dkhatibi
سه شنبه 22 آبان 1386, 06:15 صبح
اون موردی که آقای کشاورز گفتن Alignment هست ولی من مورد احتیاجم BidiMode هست.با این وجود این موردی که آقای کشاورز گفتن رو تست کردم ولی با BidiMode فرق میکنه نتیجش.
شما می خواهید ستونه از راست به چپ نوشته بشن نه!.
با اضافه کردن فیلدها برای هر فیلد یک Title هست که اونو تغییر می دهید و هیچ مشکلی برای راست به چپ نوشت شدن وجود نداره
Cave_Man
سه شنبه 22 آبان 1386, 10:10 صبح
همون ظور که قبلا هم گفتم من میخام در یک DBGrid یا DBGridEh که RightToLeft هست یک ستون رو LeftToRight کنم.
این رو توجه داشته باشید که راست چین کردن(Alignment) با راست به چپ (Bidimode )خیلی فرق میکنه
A.Nemati
سه شنبه 22 آبان 1386, 14:55 عصر
سلام
تونستم یک نیم ساعتی وقت بذارم و این کد رو برات بنویسم
البته کمی کار داره ولی میتونی با کمی کار، درستش کنی.
در این نمونه، من یک DBGrid دارم که از جدول Employees استفاده میکنه و فیلد CompanyName رو راست به چپ میکنه.
در رویداد OnDrawColumnCell مربوط به DBGrid1 کد زیر رو بنویس
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
X: Integer;
begin
if Column.FieldName = 'CompanyName' then
begin
DBGrid1.Canvas.TextFlags:= DBGrid1.Canvas.TextFlags and (not ETO_RTLREADING);
X:= Rect.Right;
DBGrid1.Canvas.TextRect(Rect, X, Rect.Top+ 5, Column.Field.AsString);
end
else
begin
DBGrid1.Canvas.TextFlags:= DBGrid1.Canvas.TextFlags and ETO_RTLREADING;
DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
end;
end;
یک نکته مهم دیگه.
برای اینکه دردسر نکشی و به خوبی کارت انجام بشه، میتونی از کامپوننت X-DBGrid استفاده کنی که روی هر یک از ستونهاش قابلیت تعریف BiDiMode رو داره و علاوه بر این امکانات جالب دیگهای هم داره که مطمئنم به دردت میخوره.
Cave_Man
چهارشنبه 23 آبان 1386, 00:47 صبح
ممنون از لطفت که وقت گذاشتی. اما من دانش کار با Canvas رو ندارم اگه لطف کنید و بقیه زحمتش رو هم قبول کنید واقعا ممنون میشم.
یه مشکل دیگه هم هست و اون اینه که تابع DefaultDrawColumnCell در Ehlib (DBGridEh با یه خطا مواجه میشه و میگه که Incompatible Types !!!!!!!!!
Cave_Man
پنج شنبه 24 آبان 1386, 21:17 عصر
دوستان یا غیر دوستان کسی میتونه کمک کنه و کد رو کامل کنه؟
JAFO_IRAN
پنج شنبه 24 آبان 1386, 21:24 عصر
کد آقای نعمتی کامله و نمیخواد کسی اون رو کامل کنه...
دانش canvas هم (اضافی) نمیخواد فقط باید کد را تایپ کنی
اما...
این کد برای یک event از dbgrid نوشته شده و DBGridEh ممکنه داستانهای خودش را داشته باشه... (مثلا type مورد استفاده برای state در اونجا فرق کنه یا اینکه اصلا جور دیگری باشه)
ارادت
Cave_Man
پنج شنبه 24 آبان 1386, 22:59 عصر
لطفا اون کد رو تست کنید تا متوجه نقص کد بشید
DBGridEh رو بطور کامل بررسی کردم متاسفانه TYPE ها هیچ فرقی نمیکنه با DBGrid .
Help مربوط به DBGridEh رو هم مطالعه کردم و دیدم که توضیحات این تابع رو و TYPE های پارامتر هاش رو در Help رجوع میده به کلاس TDBGrid و با این کلاس یکسان هست.حلا این که واقعا چرا توی DBGridEh فرق میکنه باعث تعجبه
من کد بالا رو توی DBGrid هم تست کردم ولی نتیجه نمیده یعنی فقط همون فیلد خاص رو نشون میده (بصورت LeftToRight) و بقیه فیلد ها سفید میشن .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.