#delphi
#delphi
Вопрос:
Я использую этот код, но он работает не так, как ожидалось:
procedure TTableForm.GamesGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Format: Word;
C: array[0..255] of Char;
A,B: Byte;
begin
// Columns: Col_name,Col_rel,Col_desc are multistring ;
if (ARow>0) and ((Acol = Col_name) or (Acol = Col_rel) or (Acol = Col_desc)) then begin
Format:=DT_WORDBREAK;
GamesGrid.Canvas.FillRect(Rect);
StrPCopy(C,GamesGrid.Cells[ACol,ARow]);
GamesGrid.Canvas.Font.Color:=clblue;
DrawText((Sender as TStringGrid).Canvas.Handle,C,StrLen(C),Rect,Format);
end;
Все работало нормально, но если я выбираю строку, она рисует по умолчанию, а также рисует заново (используя мой код)
рисует по умолчанию, а также рисует поверх
Но мне нужно всегда рисовать (всегда использовать DT_WORDBREAK) только с моим кодом в обоих (выбранном или нет)
Комментарии:
1. Вы установили
TStringGrid.DefaultDrawing
для свойства значение False?2. Да, я пытался его использовать, а затем мне нужно вручную переписать все методы рисования (это слишком сложно) StringGrid. Я просто не могу понять, почему он использует рисование по умолчанию. Я попытался использовать состояние (выбрано). Мне нужно только, чтобы он использовал разрыв слов в некоторых столбцах в любом состоянии
3. Когда
DefaultDrawing
значение True, сетка рисует ячейку по-своему, даже если вы также рисуете на ней. Чтобы избежать этого, вы должны установитьDefaultDrawing
значение False . Но да, это означает, что вы должны взять на себя полную ответственность за рисование всей ячейки. Обойти это невозможно. Это не так сложно сделать, просто требуется на несколько строк кода больше, чем у вас уже есть. Вам просто нужно нарисовать фон ячейки, прежде чем рисовать текст. УстановитеCanvas.Brush.Color
, а затем вызовитеCanvas.FillRect()
4. Спасибо за ответ. Я постараюсь это сделать.