Avatar billede morten_s Nybegynder
16. november 2001 - 10:44 Der er 13 kommentarer og
1 løsning

Skifte line i celle på stringgrid

Hvis man f.eks. har en celle
i et string grid, er det så muligt
at skrive på 2 liner i samme celle

antag at man har følgende streng:

StringGrid1.Cells[0,0] := \'hesten er grøn med prikker\';

Men ønsker den skal stå sådan her i cellen

hesten er grøn
med prikker

kan der så flettes noget #13#10 ind på en eller anden måde så der skiftes linie ?

\'hesten er grøn #13#10 med prikker\';

Avatar billede stoney Nybegynder
16. november 2001 - 10:48 #1
\'hesten er grøn\' + #13 + #10 + \'med prikker\';

Det er ikke testet, jeg har ikke lige delphi på denne PC

Ellers er det helt klart et emne for Borrisholt

Stoney
Avatar billede martinlind Nybegynder
16. november 2001 - 10:49 #2
Hej Morten, fik du Gem og Hent til at virke ?

Du skal nok lave OwnerDraw for at få det til at virke med to liner i en Celle

/Martin
Avatar billede hreiff Nybegynder
16. november 2001 - 11:04 #3
StringGrid1.cells[1,1] := \'Hej\'+#10+#13+\'tøser\';
virker ikke direkte. (Hej||tøser)
Avatar billede morten_s Nybegynder
16. november 2001 - 11:05 #4
hreiff> nej det har jeg prøvet
Avatar billede morten_s Nybegynder
16. november 2001 - 11:06 #5
Martin> jep det kører bare
Avatar billede martinlind Nybegynder
16. november 2001 - 11:09 #6
\"Trylle Rylle\" *S*

Det er ikke så svært som det lyder at lave ownerdraw på en grid, du kan ligge i den første Gridcomp. du fik hvor stream ikke virkede

/Martin
Avatar billede morten_s Nybegynder
16. november 2001 - 11:31 #7
martin> kan du ikke paste det aktuelle kode ind her ?
Avatar billede martinlind Nybegynder
16. november 2001 - 11:36 #8
Jeg har ikke den nøjagtige kode, den må du selv lave, men hvis du bruger DrawText() er det nemt nok, for den kan selv finde udaf at lave flere liner (parameterstyret) du kan se eks. i den comp. jeg snakkede om
Avatar billede morten_s Nybegynder
16. november 2001 - 11:55 #9
Hej hej hvor det går, nedenstående lille rutine
skifter selv linie når den ser et ; i strengen




procedure TdlgSHLoad.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  Line1: string;
  Line2: string;
  ptr: integer;
  padding: integer;
  hGrid: TStringGrid;

begin
  hGrid:= (Sender as TStringGrid);
  ptr := Pos(\';\', hGrid.Cells[ACol, ARow]);
  if ptr > 0 then
  begin
    Line1 := Copy(hGrid.Cells[ACol, ARow], 1, ptr - 1);
    Line2 := Copy(hGrid.Cells[ACol, ARow], ptr + 1,
                  Length(hGrid.Cells[ACol,ARow]) - ptr);
  end
  else Line1 := hGrid.Cells[ACol, ARow];
  hGrid.Canvas.FillRect(Rect);
  hGrid.Canvas.TextOut(Rect.Left, Rect.Top + 2, Line1);
  if ptr > 0 then
    hGrid.Canvas.TextOut(Rect.Left, Rect.Top -
                          hGrid.Canvas.Font.Height + 3, Line2);
end;
Avatar billede martinlind Nybegynder
16. november 2001 - 12:01 #10
Så skulle du tage at lave den om til DrawText() for den benytter std. cr+lf karakterer og ville give dig en meget simplere kode
Avatar billede morten_s Nybegynder
16. november 2001 - 12:03 #11
nu fandt jeg lige den her ;-))
Avatar billede martinlind Nybegynder
16. november 2001 - 12:06 #12
you got mail *S*
Avatar billede martinlind Nybegynder
16. november 2001 - 13:55 #13
Tilføj denne i TStringGridEx så virker det :

procedure TStringGridEx.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
VAR
  Strx : String;
begin
  inherited;
  if not ( csDesigning in ComponentState ) and FAllowMultiLineCells and ( Cells[aCol,aRow] <> \'\' ) then
  begin
      Canvas.FillRect(aRect);
      DrawText(Canvas.Handle,PChar(Cells[aCol,aRow]),-1,aRect,DT_CALCRECT);
      if ( aRect.Bottom - aRect.Top ) > RowHeights[aRow] then RowHeights[aRow] := aRect.Bottom - aRect.Top;
      DrawText(Canvas.Handle,PChar(Cells[aCol,aRow]),-1,aRect,DT_LEFT + DT_VCENTER + DT_WORDBREAK);
  end;
end;


Simpelt og \"smukt\"

/Martin
Avatar billede martinlind Nybegynder
16. november 2001 - 13:56 #14
Nej du får sku lige pas filen, er sendt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester