Delphi-PRAXiS

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 Mehrer Zellen vom Stringgrid kopieren (https://www.delphipraxis.net/69734-mehrer-zellen-vom-stringgrid-kopieren.html)

tom_po 19. Mai 2006 12:41


Mehrer Zellen vom Stringgrid kopieren
 
Ich möchte in einem Stringgrid mehrere Zellen markieren (mit der Ctrl.-Taste) und dann wie bei Excel z.B. auf einmal kopieren. Gibt es da eine Möglichkeit?

marabu 19. Mai 2006 13:05

Re: Mehrer Zellen vom Stringgrid kopieren
 
Klar geht das. Zuerst musst du deinem StringGrid einen message handler für WM_COPY annähen, dann musst du dir ein Format überlegen, welches du für die Zwischenablage verwenden willst. Wer soll denn die Daten aus der Zwischenablage konsumieren? Oder willst du ohne die Zwischenablage und nur innerhalb deines laufenden Programms arbeiten?

Grüße vom marabu

tom_po 19. Mai 2006 13:11

Re: Mehrer Zellen vom Stringgrid kopieren
 
danke, marabu, dass du dich meinem thema annimst.

Ich brauche keine Zwischenablage, ich will innerhalb meiner Form (laufendem Progi) bestimmte Zellen des Grids markieren und dann nach unten kopieren.

z.B. in markiere die Zellen 1,2 - 1,2 - 1,3 und will den inhalt dann in die Zellen 1,4 - 1,5 und 1,6 kopieren (auf einemal, so wie in excel)

marabu 19. Mai 2006 13:29

Re: Mehrer Zellen vom Stringgrid kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist relativ einfach. Du solltest dir Tastenkürzel überlegen, die du für CUT, COPY, PASTE, DELETE verwenden willst und die nicht identisch mit den registrierten keys für die Clipboard-Funktionalität identisch sind. Ich schlage Strg+Umsch+C für COPY vor, die anderen analog. Diese Tasten kannst du dann im Ereignis OnKeyDown() behandeln.

marabu


EDIT: Demo angehängt...

tom_po 19. Mai 2006 14:48

Re: Mehrer Zellen vom Stringgrid kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
danke zumächst mal für deine demo.

ich habe sie mir mal angeschaut, bin aber noch nicht so richtig schlau daraus geworden.

ich habe nochmal genauer beschrieben, was ich eigentlich möchte, siehe Bild

marabu 19. Mai 2006 21:11

Re: Mehrer Zellen vom Stringgrid kopieren
 
Starte die Demo, markiere den zu kopierenden Bereich, drücke die Tastenkombination Strg+Umsch+C, markiere anschließend die obere linke Zelle des Zielbereiches und drücke die Tastenkombination Strg+Umsch+V.

marabu

tom_po 20. Mai 2006 13:01

Re: Mehrer Zellen vom Stringgrid kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
MARABU, das ist ja das kopieren von einzelnen Zellen, das konnte ich schon vorher mit der Maus ohne deinen Code.

Was ich aber will ist mehrer Zellen gleichzeitig markieren (wie im Excel mit der Ctrl-Taste) und dann diese markierten Zellen kopieren (in derselben Reihenfolge)

habe noch mal mit Excel ein kleine Beispiel gemacht

Hawkeye219 20. Mai 2006 13:28

Re: Mehrer Zellen vom Stringgrid kopieren
 
Hallo,

marabus Code funktioniert schon, allerdings ist beim StringGrid im Edit-Modus das Markieren von Bereichen nur mit der Tastatur, nicht aber mit der Maus möglich. Die Optionen goEditing und goRangeSelect sind also - zumindest für die Bedienung mit der Maus - nicht kombinierbar.

Gruß Hawkeye

tom_po 20. Mai 2006 13:34

Re: Mehrer Zellen vom Stringgrid kopieren
 
ich will auch nicht unbedingt mit der maus markieren, mit der Tastatur ist das ok.
ich habe die demo von marabu probiert, kann auch einzelne zellen markieren und kopieren, schaff es aber nicht mehrere zellen auf einmal zu markieren, mit welcher tastenfolge macht man das? z.B. im Excel geht das mit dem Gedrückthalten von der Ctrl-Taste....

tom_po 20. Mai 2006 13:36

Re: Mehrer Zellen vom Stringgrid kopieren
 
habe es durch Zufall jetzt selbst herausgefunden, einfach die Shift-Taste gedrückt halten und mit der Pfeiltaste nach unten, vielen dank für eure hilfe

marabu 20. Mai 2006 15:45

Re: Mehrer Zellen vom Stringgrid kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi folks,

hatte ich doch glatt die Unterstützung für die Maus vergessen. Im Anhang eine erweiterte Demo bei der auch die Selektion per Maus möglich ist.

Grüße vom marabu

tom_po 20. Mai 2006 20:02

Re: Mehrer Zellen vom Stringgrid kopieren
 
super marabu, es klappt mit der maus, musste nur noch bei stringgrid die 1 anhängen bei mir:

Delphi-Quellcode:
procedure TDemoForm.StringGridMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MouseDown := true;
  with StringGrid[b]1[/b] do
    MouseSelection.TopLeft := MouseCoord(X, Y);
end;

procedure TDemoForm.StringGridMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if MouseDown then
    with StringGrid[b]1[/b] do
    begin
      MouseSelection.BottomRight := MouseCoord(X, Y);
      Selection := MouseSelection;
    end;
end;

procedure TDemoForm.StringGridMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MouseDown := false;
end;
jetzt fehlt nur noch, dass man mit der rechten maustaste das copy und einfügen machen könnte.
aber das ist wohl mit delphi nicht möglich, oder??

marabu 20. Mai 2006 20:16

Re: Mehrer Zellen vom Stringgrid kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Na gut - dann noch eine weiter aufgebohrte Version der Demo.

marabu

tom_po 20. Mai 2006 23:42

Re: Mehrer Zellen vom Stringgrid kopieren
 
super, jetzt hab ich's so, wie ich es gewohnt bin. Allerdings konnte ich bei Shortcut nur das Deutsche auswählen, da ich ja deutsch. Delphi habe, wollte es aber gerne auf portugiesisch, z.B. Umschalt-Taste...

aber ok, ich habe jetzt Strg+C und Strg+P gemacht

ein ganz grosses Dankeschön an dich Marabu für deine so grosszügige Hilfe...

tom_po 20. Mai 2006 23:50

Re: Mehrer Zellen vom Stringgrid kopieren
 
ein grosser Dank an Dich Marabu für deine grosszügige Hilfe...jetzt wird es so, wie ich es will.

Allerdings kann ich nur zusammenhängende Zellen auswählen..

wenn ich jetzt dazwischen welche auslassen will (die ich nicht kopieren will) kann ich z.B. im Excel mit Strg-Taste halten und dann weiter unten weiter markieren.

Das andere wäre noch, im popup-menu das Löschen der markierten Zellen (doGriddelete) einzufügen, wie wäre da die Prozedure?

marabu 21. Mai 2006 16:54

Re: Mehrer Zellen vom Stringgrid kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.

Zitat:

Zitat von tom_po
Allerdings kann ich nur zusammenhängende Zellen auswählen..

Solange wir mit der eingebauten StringGrid.Selection arbeiten wird sich auch nichts daran ändern. Ich kenne jetzt Excel nicht so gut, aber ganz allgemein müssen da eine Reihe von Festlegungen getroffen werden. Sollen wirklich beliebige nicht zusammenhängende Bereiche selektiert werden können, oder sollen nur bestimmte Zellen eines Vektors bzw. Vektoren einer Matrix ausgenommen werden können? Die Implementierung für den nicht allgemeinen Fall stelle ich mir nicht sonderlich schwer vor, aber die Bedienung durch den Benutzer wird dadurch nicht unbedingt leichter. Über den allgemeinen Fall müsste ich nachdenken, aber das ist für mich ein Problem sehr niedriger Priorität.

Zitat:

Zitat von tom_po
Das andere wäre noch, im popup-menu das Löschen der markierten Zellen (doGriddelete) einzufügen, wie wäre da die Prozedure?

Ich habe die Demo nochmals erweitert - ein paar Feinheiten und ein paar Funktionalitäten sind dazu gekommen. Außerdem habe ich aufgrund der gewachsenen Zeilenzahl den Code neu organisiert.

Grüße vom marabu

tom_po 21. Mai 2006 19:28

Re: Mehrer Zellen vom Stringgrid kopieren
 
so langsam bekomme ich ein perfektes Grid, nochmals vielen Dank, marabu

das Löschen und Einfügen werde ich bei meiner Applikation nicht anwenden, da ich Labels ausdrucke und das Blatt immer genau 40 Grid-Zeilen haben muss.

Aber deine grid-demo kann ich bestimmt mit dem Einfügen und Löschen von Zeilen und Spalten sicher bald mal verwenden.

tom_po 23. Mai 2006 08:10

Re: Mehrer Zellen vom Stringgrid kopieren
 
Ich habe doch noch 2 kleine Fragen:

1. wenn ich die Zellen mit der linken Maustaste markiere und ich will weiter nach unten fahren (Grid hat mehr Zeilen, als die Form zeigt), geht das "Ziehen" nach unten nicht....Cursor bleibt fix in der letzten sichtbaren Zeile...

2. Ich dachte wenn ich den Bereich markiere und dann kopieren auswähle, seien die Daten zwischengespeichert und ich könnte sie auch z.B. in mein Notepad ziehen, geht aber nicht....

marabu 23. Mai 2006 09:58

Re: Mehrer Zellen vom Stringgrid kopieren
 
Zitat:

Zitat von tom_po
wenn ich die Zellen mit der linken Maustaste markiere und ich will weiter nach unten fahren (Grid hat mehr Zeilen, als die Form zeigt), geht das "Ziehen" nach unten nicht....Cursor bleibt fix in der letzten sichtbaren Zeile...

Ist nicht implementiert. Dazu müsstest du im event handler für OnMouseMove() prüfen ob du mit gedrückter Maustaste in den Randbereich des Grid steuerst und dann müsstest du das Grid entsprechend rollen.

Zitat:

Zitat von tom_po
Ich dachte wenn ich den Bereich markiere und dann kopieren auswähle, seien die Daten zwischengespeichert und ich könnte sie auch z.B. in mein Notepad ziehen, geht aber nicht....

Drag und Drop zwischen verschiedenen Programmen ist auch nicht implementiert.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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 by Thomas Breitkreuz