![]() |
In 2 Stringgrids Reihen vergleichen
Hallo
wie kann ich zwei unterschiedliche Stringgrids miteinander vergleichen. Das Beispiel unten funktioniert gut mit zwei identischen Stringgrids.
Delphi-Quellcode:
Mein Problem ist das in Stringgrid2 nur eine bestimmte Auswahl von Stringgrid1 steht.
var Row,Col:integer;
begin //Zelle ermitteln Stringgrid2.MouseToCell(X,Y,Col,Row); //Selektieren Form1.Stringgrid1.Row := Row; Form1.Stringgrid1.Col := Col; //Vergleichen if Form1.Stringgrid1.Cells[Col,Row] = Stringgrid2.Cells[Col,Row] then ShowMessage('Gleich') else ShowMessage('Nicht gleich'); end; Wenn ich in Stringgrid2 eine Zeile anklicke, so wird diese nicht an der gleichen Position Stringgrid1 markiert. capo |
Re: In 2 Stringgrids Reihen vergleichen
Damit klappt es fast
Es wird nur eine bestimmte Zelle (3) durchsucht. Wie kann ich die gesamte Reihe vergleichen?
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
const ZuDurchsuchendeSpalte = 3; var i: integer; ZuSuchenderString: string; begin ZuSuchenderString:= StringGrid2.Cells[ZuDurchsuchendeSpalte, StringGrid2.Row]; for i:= 0 to Form1.stringGrid1.RowCount-1 do begin If Form1.stringGrid1.Cells[ZuDurchsuchendeSpalte, i] = ZuSuchenderString then begin Form1.stringGrid1.Row:= i; break; end; end; end; |
Re: In 2 unterschiedlichen Stringgrids Zeilen vergleichen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
du kannst die ganze Reihe vergleichen, wenn du Rows[].CommaText an Stelle von Cells[] verwendest. Aber ich fände es viel besser, wenn du dir einfach merkst, woher die jeweilige Zeile kommt. Grüße vom marabu |
Re: In 2 Stringgrids Reihen vergleichen
Hallo Marabu
ich hab bestimmt noch etwas vín Uses einzutragen: Zitat:
Delphi-Quellcode:
Gruss Capo
{$I Func.RandomStr.pas}
|
Re: In 2 Stringgrids Reihen vergleichen
Sorry, passiert mir immer wieder:
![]() |
Re: In 2 Stringgrids Reihen vergleichen
Dankeschön für dein schönes Beispiel.
In deinem Beispiel klicke ich ja in das erste Stringgrid um das zweite zu füllen. Also momentan mache ich das so ...ich suche in Stringgrid1 einen Begriff und in Stringgrid2 werden mir alle Ergebnisse angezeigt. Da ich die angezeigten Zeilen aus Stringgrid2 auch bearbeiten möchte muss ich ja den Eintrag im ersten Stringgrid bearbeiten. Deshalb dieser Weg zurück zum ersten. Nur mit deinem Besipiel klappt das nicht, deine Idee ist natürlich super. Gruss Capo |
Re: In 2 Stringgrids Reihen vergleichen
So suche ich im ersten Stringgrid
Delphi-Quellcode:
procedure ClearGrid(sg: TSTringGrid);
var iCol: Integer; begin with sg do begin RowCount := Succ(FixedRows); for iCol := FixedCols to Pred(ColCount) do Cells[iCol, FixedRows] := ''; Tag := 0; // internal rowcount end; end; procedure AppendRow(sg: TStringGrid; s: TStrings); begin with sg do begin if Tag > 0 then RowCount := RowCount + 1; Rows[Pred(RowCount)].Assign(s); Tag := Succ(Tag); // internal rowcount // if RowCount=0 then exit end; end; procedure CopyRowsContaining(sg, sgResult: TStringGrid; search: string); var i: Integer; begin ClearGrid(sgResult); with sg do for i := FixedRows to Pred(RowCount) do if AnsiContainsText(Rows[i].Text, search) then AppendRow(sgResult, Rows[i]); end;
Delphi-Quellcode:
var
s: string; begin s := ''; s := findtext.Text; if s <> '' then begin CopyRowsContaining(StringGrid1, StringGrid2, s); |
Re: In 2 Stringgrids Reihen vergleichen
Hallo,
wenn ich dich richtig verstanden habe, dann möchtest du beim Klicken auf eine Zeile in StringGrid2, dass die entsprechende Zeile in StringGrid1 markiert wird. Eine kleine Änderung an AppendRow() und du kannst es so wie in meiner Demo machen:
Delphi-Quellcode:
Freundliche Grüße
function AppendRow(sg: TStringGrid; r: TStrings): TStrings;
begin with sg do begin RowCount := Succ(Tag); Result := Rows[Tag]; Result.Assign(r); Tag := RowCount; end; end; procedure CopyRowsContaining(sg, sgResult: TStringGrid; search: string); var i: Integer; begin ClearGrid(sgResult); with sg do for i := FixedRows to Pred(RowCount) do if AnsiContainsText(Rows[i].Text, search) then AppendRow(sgResult, Rows[i]).Objects[0] := Pointer(i); end; |
Re: In 2 Stringgrids Reihen vergleichen
Hallo Marabu
erhalte dann einen Fehler beim suchen. Zitat:
Bleibt hier in der IDE stehen:
Delphi-Quellcode:
if IsBaseCell then
Delphi-Quellcode:
Siehst du da einen Zusammenhang?
function TCellProperties.GetBaseCell(c, r: Integer): TPoint;
begin if IsBaseCell then Result := Point(c,r) else begin if (CellSpanX <> - 1) and (CellSpanY <> - 1) then Result := Point(c - CellSpanX,r - CellSpanY) else Result := Point(c,r) end; end; capo |
Re: In 2 Stringgrids Reihen vergleichen
Nicht direkt,
ist denn das AdvStringGrid von TMS voll kompatibel zum VCL-StringGrid? Nachdenkliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz