StringGrid Zeile Kopieren
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; |
Re: StringGrid Zeile Kopieren
Hat da keiner mal einen Vorschlag wie ich den Textbereich einer Zeile eines StringGrids von
Delphi-Quellcode:
Kopieren kann und in einen Zeile einfügen kann??
FixedCols + 2 {bis} ColCount -3
|
Re: StringGrid Zeile Kopieren
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:
Diese Einstellungen kannste auch im Objektinspektor vornehmen.
StringGrid1.Options := StringGrid1.Options + [goRowSelect]; // aktiviert Selektion der ganzen Zeile anstelle der einen Zelle
StringGrid1.Options := StringGrid1.Options - [goRangeSelect]; // deaktiviert Selektion mehrerer Zeilen Edit: Aber es sieht so aus, als wollest du deine Selektion nicht per Mausklick realisieren. Dazu erst einmal:
Delphi-Quellcode:
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).
StringGrid1.Selection
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:
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).
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; MfG Nogge |
Re: StringGrid Zeile Kopieren
Liste der Anhänge anzeigen (Anzahl: 1)
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?? |
Re: StringGrid Zeile Kopieren
Verstehe da jetzt noch nicht so das Problem. Wenn du ein Rechtsklickmenü verwenden möchtest, schreibste den code aus
Delphi-Quellcode:
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.
procedure TForm1.Button1Click(Sender: TObject);
Oder nicht? ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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