דלפי: התאמה אוטומטית של רוחב העמודות של DBGrid

נועד לאפשר למשתמש להציג ולערוך נתונים ברשת טבלאית, DBGrid מספק דרכים שונות להתאמה אישית של הדרך בה הוא מייצג את הנתונים "שלה". עם כל כך הרבה גמישות, א דלפי המפתח תמיד יכול למצוא דרכים חדשות להפוך אותו לחזק יותר.

אחת התכונות החסרות של TDBGrid היא שאין אפשרות להתאים אוטומטית את רוחב העמודות הספציפיות כך שתתאים לחלוטין לרוחב הלקוח של הרשת. כשאתה משנה את גודל הרכיב של DBGrid בזמן ריצה, רוחבי העמודות אינם משתנים בגודל.

אם רוחב ה- DBGrid גדול מהרוחב הכולל של כל העמודות, תקבל שטח ריק מיד אחרי העמודה האחרונה. לעומת זאת, אם הרוחב הכולל של כל העמודות גדול מרוחב ה- DBGrid, יופיע סרגל גלילה אופקי.

התאמה אוטומטית של רוחב העמודות של DBGrid

יש נוהל שימושי אחד שתוכל לבצע בו שמתקן את רוחב העמודות הסלקטיביות של DBGrid כאשר שינוי גודל הרשת בזמן ההפעלה.

חשוב לציין שלרוב, יש לשנות את גודל הגודל של שתיים עד שלוש עמודות ב- DBGrid באופן אוטומטי; כל העמודות האחרות מציגות נתונים "ברוחב סטטי". לדוגמה, אתה תמיד יכול לציין רוחב קבוע עבור עמודות המציגות ערכים משדות נתונים המיוצגים עם TDateTimeField, TFloatField, TIntegerField, וכדומה.

instagram viewer

יתרה מזאת, ככל הנראה תיצור (בזמן העיצוב) רכיבי שדה מתמשכים באמצעות עורך שדות, כדי לציין את השדות במערך הנתונים, את המאפיינים שלהם ואת סדרם. בעזרת אובייקט צאצאי TField, אתה יכול להשתמש במאפיין Tag כדי לציין שעמודה מסוימת המציגה ערכים עבור אותו שדה חייבת להיות בגודל אוטומטי.

זה הרעיון: אם ברצונך שעמודה תתאים אוטומטית לשטח הזמין, הקצה ערך שלם עבור המאפיין Tag של צאצא TField המציין את הרוחב המינימלי של העמודה המתאימה.

נוהל ה- FixDBGridColumnsWidth

לפני שתתחיל, ב אירוע OnCreate עבור אובייקט הטופס שמכיל את DBGrid, ציין את העמודות שצריך לשנות באופן אוטומטי על ידי הקצאת ערך שאינו אפס עבור המאפיין Tag של האובייקט TField המקביל.

תהליך TForm1.FormCreate (שולח: TObject);
התחל
// הגדרת עמודות ניתנות לגילוי אוטומטי באמצעות יישור
// רוחב מיניום בנכס תג.

// באמצעות ערך קבוע: 40 פיקסלים
Table1.FieldByName ('FirstName'). תג: = 40;
// באמצעות ערך משתנה: רוחב ה-
// ברירת מחדל לטקסט של כותרת העמודה
Table1.FieldByName ('שם משפחה'). תג: = 4 + בד. רוחב טקסט (Table1.FieldByName ('שם משפחה'). DisplayName);
סוף
;

בקוד שלעיל, טבלה 1 היא רכיב TTable המקושר ל- רכיב DataSource, המקושר ל- DBGrid. המאפיין Table1.Table מציין את טבלת העובדים של DBDemos.

סימנו את העמודות המציגות את הערכים לשדות FirstName ו- LastName כך שניתן לשנות את הגודל באופן אוטומטי. השלב הבא הוא לקרוא את FixDBGridColumnsWidth במטפל האירועים OnResize לטופס:

תהליך TForm1.FormResize (שולח: TObject);
התחל
FixDBGridColumnsWidth (DBGrid1);
סוף
;

הערה: כל זה הגיוני אם המאפיין יישור של DBGrid כולל אחד מהערכים הבאים: alTop, alBottom, alClient או alCustom.

לבסוף, הנה הקוד של הליך FixDBGridColumnsWidth:

תהליך FixDBGridColumns רוחב (const DBGrid: TDBGrid);
var
i: מספר שלם; TotWidth: מספר שלם; VarWidth: מספר שלם; ResizableColumnCount: מספר שלם; AColumn: TColumn;
התחל
// רוחב כולל של כל העמודות לפני הגודל
TotWidth: = 0;
// כיצד לחלק חלל נוסף ברשת
VarWidth: = 0;
// כמה עמודות צריכות לשנות גודל אוטומטי
ResizableColumnCount: = 0;
ל i: = 0 ל -1 + DBGrid. עמודים. לספור dobegin
TotWidth: = TotWidth + DBGrid. עמודות [i]. רוחב;
אם DBGrid. עמודות [i]. שדה. תג 0 לאחר מכן
Inc (ResizableColumnCount);
סוף;
// הוסף 1 פיקסלים לשורת מפריד העמודותאם dgColLines ב- DBGrid. אפשרויות לאחר מכן
TotWidth: = TotWidth + DBGrid. עמודים. לספור;
// הוסף רוחב עמודת אינדיקטוראם dgIndicator ב- DBGrid. אפשרויות לאחר מכן
TotWidth: = TotWidth + Indicator רוחב;
// Vale רוחב "שמאל"
VarWidth: = DBGrid. ClientWidth - TotWidth;
// הפיצו באותה מידה את VarWidth
// לכל העמודות הניתנות לשינוי גודל אוטומטי
אם ResizableColumnCount> 0 לאחר מכן
VarWidth: = varWidth div ResizableColumnCount;
ל i: = 0 ל -1 + DBGrid. עמודים. לספור dobegin
AColumn: = DBGrid. עמודות [i];
אם טור. שדה. תג 0 אז התחיל
טור. רוחב: = דגי ACC. רוחב + VarWidth;
אם טור. רוחב אז
טור. רוחב: = דגי ACC. שדה. תגית;
סוף;
סוף;
סוף
; (* FixDBGridColumns רוחב *)
instagram story viewer