Autor Beitrag
wrtlbrnft
Hält's aus hier
Beiträge: 2

WIN 2000
D5 Enterprise
BeitragVerfasst: Mi 22.10.03 10:48 
Hallo,

wie kann ich einem Benutzer es ermöglichen eine Tabelle, die er zuvor mit copy (z.B. aus Excel) in die Zwischenablage kopiert hat, in ein StringGrid (TStringGrid) einzufügen? Dabei habe ich folgende Problemchen:

1. Wie prüfe ich, ob der Beutzer <Ctrl>+<v> bzw. <Ctrl>+<Ins> gedrückt hat? (Noch schöner wär, wenn's dazu auch ein Kontextmenü mit Einfügen gäbe).


2. Das StringGrid hat 3 Spalten. Die Anzahl der Zeilen soll - wenn nötig - erhöht werden. Je nach Auswahl soll folgendes passieren:
a) Tabelle mit einer Spalte in der Zwischenablage: einfügen in dritte Spalte des SG
b) Tabelle mit drei Spalten in der Zwischenablage: anhängen an bestehende Zeilen im Stringgrid
c) Tabelle mit mehr als drei Spalten in der Zwischenablage: Spalten 4.. verwerfen, Spalten 1-3 siehe b)

Wie kann ich den Inhalt der Zwischenablage darauf hin untersuchen, wieviele Zeilen eine dort abgelegte Tabelle hat, bzw. Welche nach welchen Trennzeichen muss ich Suchen für neue Zelle bzw. neue Zeile?

3. Kann man eine ActionList, genauer die Copy&Paste-Funktionen aus den Standardaktionen, nicht auch mit SGs verwenden? Mit einem TEdit-Feld statt einem StringGrid wäre das alles ja mit Vorlagen in 10 Sekunden erschlagen :? ...

schon mal vieeeeelen Dank für Eure Zeit :-) !!

_________________
Mögen hätt ich schon wollen, nur dürfen hab ich mich nicht getraut. (Karl Valentin)
nightmare
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 22.10.03 20:14 
Hi ! da hast du dir ein schönes Thema ausgesucht ;D
soweit ich weiss gibts da keine direkte Möglichkeit...
bau dir nen Parser ( also eine Procedure die die Tabelle zerpflückt ) und lass es einzeln einsetzen... mit 2-3 Algos sollte das schaffbar sein :D
*indeckungrenn* kleich gibts wieder was aufn Deckel weils bestimmt nich richtig is ;D
aber is ne Möglichkeit - vielleicht gehts auch einfacher... keine Ahnung

cya !
wrtlbrnft Threadstarter
Hält's aus hier
Beiträge: 2

WIN 2000
D5 Enterprise
BeitragVerfasst: Mi 19.11.03 08:37 
Hallo nightmare,

tja, da kam dann wohl nichts mehr, trotz der langen Zeit seit dem Posting. Schöne Themen hab' ich halt immer gern, für's Grobe gibt's ja F1 :wink: . Aber danke, dass wenigstens Du geantwortet hast.

Für das Basteln des Parsers fehlt mir die Geduld, ich hab' außerdem noch andere Aufgaben.

Viel Spaß noch beim coden,

CU

_________________
Mögen hätt ich schon wollen, nur dürfen hab ich mich nicht getraut. (Karl Valentin)
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mi 19.11.03 10:25 
wrtlbrnft hat folgendes geschrieben:
Für das Basteln des Parsers fehlt mir die Geduld, ich hab' außerdem noch andere Aufgaben.

Dann kann das Problem ja nicht so wichtig sein. Ich sehe auch keine andere Möglichkeit als einen Parser zu basteln der dass dann 'per Hand' einfügt.

Wenn die Sache in der Zwischenablage formatiert ist, also Zeilenweisse dann kann man das ja erstmal in ein Memobox reinkopieren, dann hast du schonmal die Anzahl der Zeilen und kannst besser mit dem Kram hantieren.

_________________
mfg. Joel
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Mi 19.11.03 10:54 
Beim SwissDelphiCenter gibt es viele Tips zum TStringGrid.
Schau mal hier nach.

Sven

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
Sl0w
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 63

Win 7, Win 8
Delphi 2009, VS2012
BeitragVerfasst: Mo 01.10.07 13:33 
Hallo,

ich habe so ziemlich das gleich Problem wie wrtlbrnft, nur das ich die Daten aus der Zwischenablage in ein DBGrid bekommen möchte.
Die Daten die in der Zwischenablage sind habe ich aus Excel kopiert und möchte sie nun mit Strg-v wieder in den DBGrid einfügen.
Hat einer schon eine Lösung dafür gefunen? Sind ja nun schon ein paar Jahre seit dem Erstellen des Thema vergangen! :)
Oder weiß jemand wie das Format der Daten in der Zwischenablage aussieht?


MFG

Lars
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 01.10.07 13:47 
Moin und :welcome: im Forum!

user profile iconSl0w hat folgendes geschrieben:
Oder weiß jemand wie das Format der Daten in der Zwischenablage aussieht?

Ansatz: pack dir ein Memo und einen Button auf die Form, in den Buttonhandler Memo1.PasteFromClipboard;und ausprobieren. :idea: ;) (AFAIK liefert Excel CSV Tab-getrennt ab :gruebel:)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Alpha_Wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 297

Ubuntu, Win XP, Win Vista
C#, Delphi 6 Prof, Delphi 2007 Prof, Java
BeitragVerfasst: Mo 01.10.07 13:53 
Zum Fall DB-Grid.

Das DB-Grid zeigt nur Daten aus einer DB-Tabelle an.. also brauchst du die Daten nicht ins Grid friemeln sondern musst sie in die Datenbank (mit SQL) bekommen.

Soweit ich weiss werden die Daten wie folgt in die Zwischenablage kopiert:
ausblenden Quelltext
1:
2:
A1  B1
A2  B2


Also Tab-getrennte Werte.. wenn du weisst was die einzelnen Spalten für Spalten in deiner DB-Tabelle sind, dann ist es doch kein problem.

Musst nur einzelne Werte abtrennen indem du auf Tab prüfst.

Wie du ein String bei einem bestimmten Zeichen Teilst findest du mit der Suche..

_________________
Diskutiere nie mit einem Irren - er zieht dich auf sein Niveau und schlägt dich mit seiner Erfahrung.
Sl0w
ontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 63

Win 7, Win 8
Delphi 2009, VS2012
BeitragVerfasst: Mo 01.10.07 14:17 
Danke für die schnellen Antworten, werde mich gleich rann machen.