Die Größe der Zellen ändern

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Gitter anpassen - Index

Anmerkung:  Wenn die Größe eines Fensters oder Steuerelements von einem Benutzer oder einer Anwendung geändert wird, sendet Windows eine WM_SIZE-Botschaft. Das betreffende Fenster oder Steuerelement kann dadurch Einstellungen vornehmen, die für das spätere Zeichnen in der neuen Größe erforderlich sind. Ihre Komponente kann auf die Botschaft mit einer Änderung der Zellgröße reagieren und dafür sorgen, dass weiterhin alle Zellen innerhalb des Steuerelements Platz finden. Um auf die Botschaft WM_SIZE antworten zu können, benötigt die Komponente eine entsprechende Botschaftsbehandlungsmethode.

Details über Botschaftsbehandlungsmethoden finden Sie unter Neue Routinen zur Botschaftsbehandlung erstellen.

Dazu fügen Sie dem Steuerelement eine als protected deklarierte Methode namens WMSize hinzu, die mit WM_SIZE indiziert ist. Diese Methode muss die korrekte Zellgröße berechnen, die für eine vollständige Anzeige in der neuen Größe erforderlich ist:



 type
   TSampleCalendar = class(TCustomGrid)
   protected
     procedure WMSize(var Message: TWMSize); message WM_SIZE;
   .
   .
   .
   end;
 .
 .
 .
 procedure TSampleCalendar.WMSize(var Message: TWMSize);
 var
   GridLines: Integer;                                      { Temporäre lokale Variable }
 begin
   GridLines := 6 * GridLineWidth                { Gesamtgröße aller Zeilen berechnen }
   DefaultColWidth := (Message.Width - GridLines) div 7;           { Neue Standardbreite }
   DefaultRowHeight := (Message.Height - GridLines) div 7;          { und die Zellenhöhe}
 end;



 
 // Header-Datei
 class PACKAGE TSampleCalendar : public TCustomGrid
 {
 .
 .
 .
 protected:
     void __fastcall WMSize(TWMSize &Message);
 BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
 END_MESSAGE_MAP(TCustomGrid)
 };



 
 // Implementierungsdatei
 void __fastcall TSampleCalendar::WMSize(TWMSize &Message)
 {
   int GridLines;                                  // Temporäre lokale Variable
   GridLines = 6 * GridLineWidth;                  // Berechnete kombinierte Größe aller Linien
   DefaultColWidth = (Message.Width - GridLines) / 7;    // Neue Standard-Zellenbreite setzen
   DefaultRowHeight = (Message.Height - GridLines) / 7;  // und die Zellenhöhe
 }



Wenn nun die Größe des Kalenders verändert wird, zeigt er alle Zellen in der maximalen Größe, die in das Steuerelement passt, an.

Im vorliegenden Beispiel muss im Kalender-Steuerelement die Methode BoundsChanged überschrieben werden, so dass die korrekte Zellgröße berechnet wird, die für eine vollständige Anzeige in der neuen Größe erforderlich ist:



 type
   TSampleCalendar = class(TCustomGrid)
   protected
     procedure BoundsChanged; override;
   .
   .
   .
   end;
 .
 .
 .
 procedure TSampleCalendar.BoundsChanged;
 var
   GridLines: Integer;                                      { Temporäre lokale Variable }
 begin
   GridLines := 6 * GridLineWidth                { Gesamtgröße aller Zeilen berechnen }
   DefaultColWidth := (Width - GridLines) div 7;          { Neue Standardbreite }
   DefaultRowHeight := (Height - GridLines) div 7;              { Neue Standardhöhe }
   inherited; { Geerbte Methode aufrufen}
 end;



 
 // Header-Datei
 class PACKAGE TSampleCalendar : public TCustomGrid
 {
 .
 .
 .
 protected:
     void __fastcall BoundsChanged(void);
 };



 
 // Implementierungsdatei
 void __fastcall TSampleCalendar::BoundsChanged(void)
 {
   int GridLines;                                  // Temporäre lokale Variable
   GridLines = 6 * GridLineWidth;                  // Berechnete kombinierte Größe aller Linien
   DefaultColWidth = (Width - GridLines) / 7;    // Neue Standard-Zellenbreite setzen
   DefaultRowHeight = (Height - GridLines) / 7;  // und die Zellenhöhe
   TCustomGrid::BoundsChanged(); // Nun die geerbte Methode aufrufen
 }


Siehe auch