AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In 2 Stringgrids Reihen vergleichen

Ein Thema von capo · begonnen am 30. Jan 2007 · letzter Beitrag vom 1. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#1

In 2 Stringgrids Reihen vergleichen

  Alt 30. Jan 2007, 22:56
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
Hotte
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: In 2 Stringgrids Reihen vergleichen

  Alt 31. Jan 2007, 00:09
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;
Hotte
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: In 2 unterschiedlichen Stringgrids Zeilen vergleichen

  Alt 31. Jan 2007, 08:12
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
Angehängte Dateien
Dateityp: zip sg-sync_136.zip (2,0 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: In 2 Stringgrids Reihen vergleichen

  Alt 31. Jan 2007, 08:29
Hallo Marabu
ich hab bestimmt noch etwas vín Uses einzutragen:
Zitat:
[Fehler] DemoFrm.pas(36): Undefinierter Bezeichner: 'RandomStr'
bei
{$I Func.RandomStr.pas} Gruss Capo
Hotte
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: In 2 Stringgrids Reihen vergleichen

  Alt 31. Jan 2007, 08:43
Sorry, passiert mir immer wieder: klick
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: In 2 Stringgrids Reihen vergleichen

  Alt 31. Jan 2007, 10:05
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
Hotte
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: In 2 Stringgrids Reihen vergleichen

  Alt 31. Jan 2007, 10:25
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);
Hotte
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: In 2 Stringgrids Reihen vergleichen

  Alt 31. Jan 2007, 10:42
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
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: In 2 Stringgrids Reihen vergleichen

  Alt 31. Jan 2007, 13:57
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:
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
Hotte
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: In 2 Stringgrids Reihen vergleichen

  Alt 31. Jan 2007, 14:17
Nicht direkt,

ist denn das AdvStringGrid von TMS voll kompatibel zum VCL-StringGrid?

Nachdenkliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz