Die Größe der Zellen ändern
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
}