AGB  ·  Datenschutz  ·  Impressum  







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

StringGrid Zeile Kopieren

Ein Thema von SaFu · begonnen am 27. Aug 2008 · letzter Beitrag vom 6. Sep 2008
Antwort Antwort
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#1

StringGrid Zeile Kopieren

  Alt 27. Aug 2008, 17:22
Hi

Ich versuche gerade den Inhalt einer Zeile vom StringGrid Zu Kopieren, dazu wollte ich sie erstmal makieren, was mir bis jetzt nur so halb gelungen ist.

Jetzt frage ich mich wie mach ich das am besten, die ausgewählte Zeile zu makieren und den Inhalt der Zeile in eine andere ausgwählte Zeil zu kopieren.???

Das ist mein jetziger Lösungsansatz

Delphi-Quellcode:
procedure TForm7.ZeileMakieren1Click(Sender: TObject);
Var i : integer;
begin
for I := 0 to StringGrid1.RowCount -1 do
 begin
  StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols + 2, StringGrid1.RowCount + i , StringGrid1.ColCount -3, StringGrid1.RowCount + i));
 end;
end;
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: StringGrid Zeile Kopieren

  Alt 28. Aug 2008, 10:46
Hat da keiner mal einen Vorschlag wie ich den Textbereich einer Zeile eines StringGrids von

FixedCols + 2 {bis} ColCount -3 Kopieren kann und in einen Zeile einfügen kann??
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#3

Re: StringGrid Zeile Kopieren

  Alt 29. Aug 2008, 01:49
Moin fuknersascha,
du sollst als erstes die DelphiPraxis-Suche nutzen. Dafür ist sie schließlich da ;) Es gibt hunderte Einträge zur Selektion einer Zeile. Da ich gerade guter Laune bin, hier noch mal für faule:
Delphi-Quellcode:
StringGrid1.Options := StringGrid1.Options + [goRowSelect]; // aktiviert Selektion der ganzen Zeile anstelle der einen Zelle
StringGrid1.Options := StringGrid1.Options - [goRangeSelect]; // deaktiviert Selektion mehrerer Zeilen
Diese Einstellungen kannste auch im Objektinspektor vornehmen.

Edit:
Aber es sieht so aus, als wollest du deine Selektion nicht per Mausklick realisieren.
Dazu erst einmal:
StringGrid1.Selection nimmt nur Koordinaten für eine Zelle oder einer ganzen Zeile an bzw. des gesamten StringGrids. Es werden anscheinend nicht mehrere Zellen verschiedener Zeilen unterstützt. Desweiteren stellt ein Rect einen Bereich einer Komponente in Pixel dar. Du kannst also auch nicht einfach für Left einen Spalteindex angeben (Index <> Pixelposition).

Tja, dies musst du wohl selbst programmieren, denn meines Wissens gibt es keine vorprogrammierte Funktion dafür. Ich habe hier mal ein kleines Beispiel für dich:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Options := StringGrid1.Options + [goRowSelect]; // aktiviert Selektion der ganzen Zeile anstelle der einen Zelle
  StringGrid1.Options := StringGrid1.Options - [goRangeSelect]; // deaktiviert Selektion mehrerer Zeilen

  selList := TList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  selList.Free;
end;

//---------------------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := StringGrid1.FixedRows to StringGrid1.RowCount-1 do
    selList.Add(i);
  StringGrid1.Invalidate;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  this: TStringGrid;
begin
  if (Sender is TStringGrid) then
  begin
    this := TStringGrid(Sender);

    if not (gdSelected in State) then
    begin
      if (ACol >= this.FixedCols) and (ARow >= this.FixedRows) and (selList.IndexOf(ARow) <> -1) then
      begin
        this.Canvas.Brush.Color := clHighlight;
        this.Canvas.Font.Color := clHighlightText;
        this.Canvas.FillRect(Rect);
      end;
    end;
  end;
end;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  selList.Clear;
  StringGrid1.Invalidate;
end;
Die selList ist hierbei eine Liste, die Integer-Werte (hier: Zeilenindizes des StringGrids) aufnimmt. Da es keine generischen Listen bis mind. Delphi 7 gibt (nur ein Add-On iwo im Netz), müsstest du dir eine solche Liste auch noch mal programmieren (einfach die Delphi-Suche benutzen - gibt sogar nen Tutorial, wenn ich mich nicht irre).

MfG
Nogge
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: StringGrid Zeile Kopieren

  Alt 30. Aug 2008, 18:12
Hallo Nogge

Danke erstml für deine Antwort und ich hätte vielleicht erwähnen sollen das ich das Kopieren gerne über Rechtsklick auf dem Popup machen würde und die Eigenschaft der einzelzellen makieren als standart beibehalten möchte.

Nur beim rechtsklick und auswahl "Ziele Kopieren" soll die Zeile Kopiert werden.

Das andere Problem ist das ich ein Spezielles SringGrid verwende das Zellen intern teilen kann und auch Texte hinzufügen kann.

Sieht man im Bild.

Zur Zeit Kopiere ich So eine Zelle
Delphi-Quellcode:
 begin
   if (StringGrid1.Col = 0) or (StringGrid1.Col = 8)then
    begin
      exit;
    end
    else
   if StringGrid1.IsSplitted(StringGrid1.Col,StringGrid1.Row) then // abfrage ob Zelle geteilt ist
    begin
      iGesplittet:= 1;
      sKopierenOben:= StringGrid1.GetUpperValue(StringGrid1.Col,StringGrid1.Row);
      sKopierenUnten:= StringGrid1.GetLowerValue(StringGrid1.Col,StringGrid1.Row);
    end
   else
    begin
     iGesplittet:= 0;
     sKopierenOben:= StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];
     sKopierenUnten:= '';
    end;
end;

Kan man sowas überhaupt noch Realiesieren oder wäre es besser auf VST umsteigen kann die VST sowas??
Miniaturansicht angehängter Grafiken
splitgrid_140.jpg  
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#5

Re: StringGrid Zeile Kopieren

  Alt 6. Sep 2008, 15:26
Verstehe da jetzt noch nicht so das Problem. Wenn du ein Rechtsklickmenü verwenden möchtest, schreibste den code aus procedure TForm1.Button1Click(Sender: TObject); einfach in den entsprechenden Punkt des Menüs, anstatt ein Button zu benutzen. Desweiteren kannste die Idee mit der SelList trotzdem verwenden. Beim Einfüge bzw. Jopieren kannste dann einfach durch die Indizes, die in der SelList gespeichert sind, auf deine Zeile zugreifen, alle Texte zwspeichern und dann in die gewünschte Zeile einfügen. Dazu brauchste halt nur die SelList global anlegen und der Rest geschieht in der Kopieren-Funktion.

Oder nicht? ;)
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:34 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