2011-09-14 14 views
1

文字列グリッドにアイコンを配置しましたが、すべてのグラフィックスが整列していないという問題がありました。私は、アイコンを整列させるためにテキストを中心に再加工しようとしましたが、運はありません。私はビットマップとその機能を研究しようとしましたが、私は役に立たないものは見つけられませんでした。誰も私を助けることができますか?セル内の文字列グリッドとグラフィック

EDIT(コードから誤って質問への回答で追加):

bitmap := Tbitmap.Create; 
bitmap.LoadFromFile('equal.bmp'); 
bitmap.SetSize(150,60); 
stringgrid1.Canvas.StretchDraw(stringgrid1.CellRect(3,J), bitmap); 
SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER); 
StringGrid1.Canvas.TextRect(stringgrid1.CellRect(3,J), 
    (stringgrid1.CellRect(3,J).Left+stringgrid1.CellRect(3,J).Right) div 2, 

stringgrid1.CellRect(3,J).Top + 5,StringGrid1.Cells[3,J]); 
SetTextAlign(StringGrid1.Canvas.Handle, TA_LEFT); 
+1

のStackOverflowへようこそ。質問を編集して、TStringGrid.OnDrawCellイベントハンドラのコードを追加し、現在の結果をスクリーンキャプチャして、解決しようとしている問題を確認できますか?あなたにもっと良い答えを与えるのがずっと簡単になります。ありがとう。 :) –

+1

下の回答からこのコードにコードを移動しました。これが実際のコードであれば、それは非常に間違っており、OnDrawCellイベントハンドラ以外の場所にあるようです。また、あなたの 'equal.bmp'を持っていないか、あなたのグリッドのレイアウトについて知っているので、あなたの投稿を編集し、あなたのコードが現在行っていることのスクリーンキャプチャを追加してください。 (元の質問を投稿するのに使用したのと同じIDでログインした場合は編集できますが、回答を投稿するのではなく新しい情報を明確にしたり追加したりするために編集する必要があります。 –

答えて

3

(それは私が便利持っていたものだが、コードはD2010で動作する必要があるため、デルファイ7)ここでは一例です:

ここで
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
    Rect: TRect; State: TGridDrawState); 
var 
    Bmp: TBitmap; 
    CellText: string; 
    R: TRect; 
const 
    L_PAD = 5; // Amount between right side of image and start of text 
    T_PAD = 5; // Amount between top of cell and top of text 
begin 
    // Some text to display in cells. 
    CellText := Format('Row: %d Col: %d', [ARow, ACol]); 

    // Draw an image along the left side of each cell in the first 
    // col (not the fixed ones, which we'll leave alone) 
    if ((ACol = 1) or (ACol = 3)) and (ARow > 0) then 
    begin 
    Bmp := TBitmap.Create; 
    try 
     Bmp.LoadFromFile('C:\glyfx\common\bmp\24x24\favorites24.bmp'); 
     if ACol = 1 then // left align image 
     begin 
     R.Top := Rect.Top + 1; 
     R.Left := Rect.Left + 1; 
     R.Right := R.Left + Bmp.Width; 
     R.Bottom := R.Top + Bmp.Height; 
     StringGrid1.Canvas.StretchDraw(R, Bmp); 
     StringGrid1.Canvas.TextOut(R.Right + L_PAD, R.Top + T_PAD, CellText); 
     end 
     else 
     begin // right align image 
     StringGrid1.Canvas.TextOut(Rect.Left + L_PAD, 
            Rect.Top + L_PAD, 
            CellText); 
     R.Top := Rect.Top + 1; 
     R.Left := Rect.Right - Bmp.Width - 1; 
     R.Right := Rect.Right - 1; 
     R.Bottom := R.Top + L_PAD + Bmp.Height; 
     StringGrid1.Canvas.StretchDraw(R, Bmp); 
     end; 
    finally 
     Bmp.Free; 
    end; 
    end 
    else 
    StringGrid1.Canvas.TextOut(Rect.Left + L_PAD, Rect.Top + T_PAD, CellText); 
end; 

は、それは次のようになります。

StringGrid with image aligned

関連する問題