Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi In 2 Stringgrids Reihen vergleichen (https://www.delphipraxis.net/85443-2-stringgrids-reihen-vergleichen.html)

capo 30. Jan 2007 21:56


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:
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;
Mein Problem ist das in Stringgrid2 nur eine bestimmte Auswahl von Stringgrid1 steht.
Wenn ich in Stringgrid2 eine Zeile anklicke, so wird diese nicht an der gleichen Position Stringgrid1 markiert.

capo

capo 30. Jan 2007 23:09

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;

marabu 31. Jan 2007 07:12

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

capo 31. Jan 2007 07:29

Re: In 2 Stringgrids Reihen vergleichen
 
Hallo Marabu
ich hab bestimmt noch etwas vín Uses einzutragen:
Zitat:

[Fehler] DemoFrm.pas(36): Undefinierter Bezeichner: 'RandomStr'
bei
Delphi-Quellcode:
{$I Func.RandomStr.pas}
Gruss Capo

marabu 31. Jan 2007 07:43

Re: In 2 Stringgrids Reihen vergleichen
 
Sorry, passiert mir immer wieder: klick

capo 31. Jan 2007 09:05

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

capo 31. Jan 2007 09:25

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);

marabu 31. Jan 2007 09:42

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:
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;
Freundliche Grüße

capo 31. Jan 2007 12:57

Re: In 2 Stringgrids Reihen vergleichen
 
Hallo Marabu

erhalte dann einen Fehler beim suchen.

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004BD5D8 in Modul 'Project1.exe'. Lesen von Adresse 0000004B'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Evt. liegt es an der TMS Stringgrid Kompo.
Bleibt hier in der IDE stehen:
Delphi-Quellcode:
if IsBaseCell then
Delphi-Quellcode:
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;
Siehst du da einen Zusammenhang?

capo

marabu 31. Jan 2007 13:17

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.
Seite 1 von 2  1 2      

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