Einzelnen Beitrag anzeigen

Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Probleme mit TextWidth im String Grid

  Alt 3. Sep 2013, 08:22
Vielen Dank für die vielen Antworten...

Hat nur den Nachteil, das es beim Scrollen zuppelt, wenn dann plötzlich ein breiter Text erscheint.
Das Zuppeln läßt sich vermeiden, wenn man pro Spalte den breitesten Text ermittelt und die jeweilige Spaltenbreite danach setzt.
Jupp, das macht meine Prozedur ja schon

Ich versteh was Ihr meint und ich mein ich hab das auch schon so umgesetzt... Korrigiert mich wenn ich falsch liege...

Also hier mein Ablauf:
1. Daten in StringGrid schreiben
2. Aufruf der Routine aus meinem ersten Beitrag um die Spalten Breite festzulegen

So sollte ich doch eigentlich die maximale länge erhalten und die Spalten Breite optimal anpassen können?

Anbei noch der Source aus dem OnDrawCell:
Delphi-Quellcode:
procedure Teancheck_eanscan_form.strgrid_eancheckDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

var
fntSize : Integer;
s : String;
fntAlignment : TAlignment;

begin


  //=== Format Settings for Current Scan =======================================
  //Headers
  fntAlignment := taLeftJustify;
  If ARow In [0,1,2,4,5,7,8] Then
  Begin
    strgrid_eancheck.Canvas.Brush.Color := $00A2FBF7;
    strgrid_eancheck.Canvas.Font.Color    := clBlack;
    strgrid_eancheck.Canvas.Font.Size := 9;
    strgrid_eancheck.Canvas.Font.Name := 'Trebuchet MS';
    strgrid_eancheck.Canvas.Font.Style := strgrid_eancheck.Canvas.Font.Style + [fsBold];
  End;
  //Data
  If ARow In [3,6,9] Then
  Begin
    strgrid_eancheck.Canvas.Brush.Color := $00CCFDFB;
    strgrid_eancheck.Canvas.Font.Color    := clBlack;
    strgrid_eancheck.Canvas.Font.Size := 11;
    strgrid_eancheck.Canvas.Font.Name := 'Trebuchet MS';
    strgrid_eancheck.Canvas.Font.Style := strgrid_eancheck.Canvas.Font.Style + [fsBold];
  End;
  //============================================================================



  //=== Format Settings for Previous Scan ======================================
  //Headers
  fntAlignment := taLeftJustify;
  If ARow In [12,13,14,16,17,19,20] Then
  Begin
    strgrid_eancheck.Canvas.Brush.Color := $00D8D8D8;
    strgrid_eancheck.Canvas.Font.Color    := clBlack;
    strgrid_eancheck.Canvas.Font.Size := 9;
    strgrid_eancheck.Canvas.Font.Name := 'Trebuchet MS';
    strgrid_eancheck.Canvas.Font.Style := strgrid_eancheck.Canvas.Font.Style + [fsBold];
  End;
  //Data
  If ARow In [15,18,21] Then
  Begin
    strgrid_eancheck.Canvas.Brush.Color := $00E5E5E5;
    strgrid_eancheck.Canvas.Font.Color    := clBlack;
    strgrid_eancheck.Canvas.Font.Size := 11;
    strgrid_eancheck.Canvas.Font.Name := 'Trebuchet MS';
    strgrid_eancheck.Canvas.Font.Style := strgrid_eancheck.Canvas.Font.Style + [fsBold];
  End;
  //============================================================================



  //=== Format Settings for selected Cell ======================================
  fntAlignment := taLeftJustify;
  If ARow In [0,1,2,4,5,7,8,12,13,14,16,17,19,20] Then fntSize := 9 Else fntSize := 10;
  If (gdSelected In State) Then
  Begin
    strgrid_eancheck.canvas.Brush.Color := clHighlight;
    strgrid_eancheck.Canvas.Font.Color    := clWhite;
    strgrid_eancheck.Canvas.Font.Size := fntSize;
    strgrid_eancheck.Canvas.Font.Name := 'Trebuchet MS';
    strgrid_eancheck.Canvas.Font.Style := strgrid_eancheck.Canvas.Font.Style + [fsBold];
  End;
  //============================================================================



  //=== Drawing ================================================================
  strgrid_eancheck.canvas.FillRect(Rect);
  s := strgrid_eancheck.Cells[ACol, ARow];
  strgrid_eancheck.canvas.FillRect(Rect);
  If fntAlignment = taLeftJustify Then DrawText(strgrid_eancheck.Canvas.Handle, PChar(s), Length(s), Rect, DT_SINGLELINE or DT_LEFT or DT_VCENTER);
  If fntAlignment = taRightJustify Then DrawText(strgrid_eancheck.canvas.Handle, PChar(s), Length(s), Rect, DT_SINGLELINE or DT_RIGHT or DT_VCENTER);
  If fntAlignment = taCenter Then DrawText(strgrid_eancheck.canvas.Handle, PChar(s), Length(s), Rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
  //============================================================================

end;
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat