2012-04-04 9 views
1

Die DBStringGrid-Komponente von TMS verfügt über eine integrierte Methode zur automatischen Größenanpassung von Zeilenhöhen. Ich verstehe die Eigenschafteneinstellungen, die für das Funktionieren der Methode erforderlich sind, und wenn sie aufgerufen werden, funktioniert es gut.Wie erhalten Sie eine Methode, die aufgerufen wird, wenn ein DBGrid angezeigt wird?

Ich möchte die Zeilen meines Rasters automatisch skalieren, wenn das Raster angezeigt wird, und ich kann nicht herausfinden, wo der Methodenaufruf platziert werden soll. Ich dachte, das OnCustomCellDraw -Ereignis der Komponente wäre die richtige Wahl, aber das verursacht nur das Flackern und Speichernutzung verbunden mit einer Endlosschleife (auch wenn grid.doubleBuffering auf True gesetzt ist).

Wo würden Sie vorschlagen, dass ich den Aufruf von AutoSizeRows platziere, wenn ich möchte, dass er immer dann aufgerufen wird, wenn das Raster angezeigt wird?

UPDATE: Kens Antwort ist gut, aber ich finde auch, dass der Aufruf des OnDataChange-Ereignisses der DataSource, wann immer die DB in den Bearbeitungsmodus geht, für meine Zwecke genauso gut ist.

+0

Das Flackern in 'OnCustomCellDraw' verursacht, weil dieses Ereignis ausgelöst wird, wenn die Zelle gezogen werden muss. Es ist also nicht der richtige Ort. – TLama

+1

In dem OnShow-Ereignis des enthaltenden Formulars könnte ein guter Ort sein. –

+0

@Ken, es ist mehr Antwort als ein Kommentar ;-) – TLama

Antwort

2

Sie können die Eltern verwenden (enthält) OnShow Ereignis des Formulars:

procedure TForm1.FormShow(Sender: TObject); 
begin 
    // Make sure grid's data is available by opening the 
    // dataset first, and then call your AUtoSizeRows here. 
end; 
+0

Danke @Ken, wie immer, noch eine gute Antwort ... Ich bin erstaunt, Sie können all diese hilfreichen SO Antworten und immer noch die Zeit finden zu arbeiten! –

+0

:) Danke. Ich frage mich dasselbe über David Heffernan und RRUZ, außer dass ich mich nicht nur wundere, wenn sie arbeiten, sondern auch, wenn sie schlafen. (Vor allem David - er ist * immer * hier. ) –

+2

Ich bin ziemlich sicher, was @DavidHeffernan ist ein Roboter :) – RRUZ