Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Copy, Paste und Hotkeys
covel - Mo 21.01.08 13:06
Titel: Copy, Paste und Hotkeys
Moin,
ich würde gerne bestimmte Texte (im ARRAY[0..9]) in ein beliebige Komponente (Memo,Edit,etc..) während der Laufzeit einfügen. Das Einfügen soll über HotKeys funktionieren.
Nun bräuchte ich mal einen Tip wie ich diese Texte einfügen kann (ohne die Events der einzelnen Komponenten zuverändern). Ich weiss einfach nicht wie ich anfangen soll.
Bin für jeden Tip dankbar.
MarcRB1975 - Mo 21.01.08 15:35
Hallo,
warum möchtest du das nicht z.B. so machen:
Edit1.text := DEINARRAY[1];
Hatte noch was vergessen:
Die Deklaration des Array ist dir aber schon klar, oder? Also dir ist schon bekannt, wie man die Array´s bzw. das Array deklariert??
Wenn du das weißt, kannst du doch z.B. über einen Button-Click o.ä. dem Edit/MEMO das einzelne Array zuordnen. Also so hab ich das zumindest immer gemacht.
Es gibt ja auch noch Array´s wie z.B. DEINARRAY[5][19] oder so. Array´s sind schon ne tolle Angelegenheit.
Moderiert von
jasocul: Beiträge zusammengefasst.
covel - Mo 21.01.08 16:29
Hi,
Zitat: |
Hallo,
warum möchtest du das nicht z.B. so machen:
Edit1.text := DEINARRAY[1]; |
es sind einfach zuviele Edit/Memo- Felder, ebenfalls sollen beliebige Texte an beliebigen Stellen eingefügt werden können.
Ich habe das Problem nu mit einer Hotkey-Komponente und einer Zwischenablage realisiert.
http://www.swissdelphicenter.ch/de/showcode.php?id=2375
MarcRB1975 - Mo 21.01.08 16:56
Ich habe mir das mal angeschaut und auch getestet.
Da ich mir jetzt nicht so richtig vorstellen kann, was damit bezweckt wird oder wie das ganz ablaufen soll, sind meine Frage(n) mal vorab:
Beispiel:
Du hast 30 Edit´s.
Wird jedem Edit etwas bestimmtes zugewiesen? Das soll bedeuten, JEDES EDIT ist separat angesehen werden?
Oder gilt die Zuweisung dann z.B. dem Edit 1 bis 5. Was wird den Edits zugewiesen, was soll z.B. gemacht werden?
Wenn das Programm beendet wird, geht doch wieder alles verloren?? Ist das auch dein Ziel, soll das so sein oder bleiben??
covel - Mo 21.01.08 17:05
Hi,
ich hole nochmal nen bischen weiter aus.
Das ganze Programm umfasst ca. 200-300 Eingabenfelder (Memo/Edit/ect wert ist nur geschätzt). Mit diesem Programm arbeiten ca. 40 Leute.
Diese 40 Leute können über eine extra Form "Persönliche Texte" zusammenstellen. Diese Texte sollen an beliebigen Positionen innerhalb der software via hotkeys eingefügt werden.
Ich bin nun soweit das per "Hotkey-Tastendruck" der entsprechende Text in die Zwischenablage kopiert wird. Das einzige Problem was ich nun noch habe ist, dass ich die Texte noch mit STRG+V manuell in die Eingabefelder einfügen muss. Jedoch sollen die TExte automatisch in das Eingabefeld (welches akt. den Focus besitzt)eingefügt werden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132:
| procedure Tform_prueftexte.setHotKey; var Key : Word; Modifiers: UINT; begin ShortCutToHotKey(16432, Key, Modifiers); Hotkey_id0 := GlobalAddAtom('MyHotKey_0'); RegisterHotKey(Handle, Hotkey_id0, Modifiers, Key);
ShortCutToHotKey(16433, Key, Modifiers); Hotkey_id1 := GlobalAddAtom('MyHotKey_1'); RegisterHotKey(Handle, Hotkey_id1, Modifiers, Key);
ShortCutToHotKey(16434, Key, Modifiers); Hotkey_id2 := GlobalAddAtom('MyHotKey_2'); RegisterHotKey(Handle, Hotkey_id2, Modifiers, Key);
ShortCutToHotKey(16435, Key, Modifiers); Hotkey_id3 := GlobalAddAtom('MyHotKey_3'); RegisterHotKey(Handle, Hotkey_id3, Modifiers, Key);
ShortCutToHotKey(16436, Key, Modifiers); Hotkey_id4 := GlobalAddAtom('MyHotKey_4'); RegisterHotKey(Handle, Hotkey_id4, Modifiers, Key);
ShortCutToHotKey(16437, Key, Modifiers); Hotkey_id5 := GlobalAddAtom('MyHotKey_5'); RegisterHotKey(Handle, Hotkey_id5, Modifiers, Key);
ShortCutToHotKey(16438, Key, Modifiers); Hotkey_id6 := GlobalAddAtom('MyHotKey_6'); RegisterHotKey(Handle, Hotkey_id6, Modifiers, Key);
ShortCutToHotKey(16439, Key, Modifiers); Hotkey_id7 := GlobalAddAtom('MyHotKey_7'); RegisterHotKey(Handle, Hotkey_id7, Modifiers, Key);
ShortCutToHotKey(16440, Key, Modifiers); Hotkey_id8 := GlobalAddAtom('MyHotKey_8'); RegisterHotKey(Handle, Hotkey_id8, Modifiers, Key);
ShortCutToHotKey(16441, Key, Modifiers); Hotkey_id9 := GlobalAddAtom('MyHotKey_8'); RegisterHotKey(Handle, Hotkey_id9, Modifiers, Key); end;
procedure TForm_prueftexte.WMHotKey(var Msg: TWMHotKey); var result_string: string; key: integer; begin if Msg.HotKey = Hotkey_id0 then begin key:=0; end;
if Msg.HotKey = Hotkey_id1 then begin key:=1; end;
if Msg.HotKey = Hotkey_id2 then begin key:=2; end;
if Msg.HotKey = Hotkey_id3 then begin key:=3; end;
if Msg.HotKey = Hotkey_id4 then begin key:=4; end;
if Msg.HotKey = Hotkey_id5 then begin key:=5; end;
if Msg.HotKey = Hotkey_id6 then begin key:=6; end;
if Msg.HotKey = Hotkey_id7 then begin key:=7; end;
if Msg.HotKey = Hotkey_id8 then begin key:=8; end;
if Msg.HotKey = Hotkey_id9 then begin key:=9; end;
if (key>=0) and (key<10) then begin clipboard.clear; result_string:=get_all_shortcuts; if result_string<>'' then begin Clipboard.AsText :=result_string;
end; end else clipboard.clear;
end;
procedure TForm_prueftexte.ShortCutToHotKey(HotKey: TShortCut; var Key : Word; var Modifiers: Uint); var Shift: TShiftState; begin ShortCutToKey(HotKey, Key, Shift); Modifiers := 0; if (ssShift in Shift) then Modifiers := Modifiers or MOD_SHIFT; if (ssAlt in Shift) then Modifiers := Modifiers or MOD_ALT; if (ssCtrl in Shift) then Modifiers := Modifiers or MOD_CONTROL; end;
procedure Tform_prueftexte.FormCreate(Sender: TObject); begin setHotKey; end; |
Dies ist mein akt. Code (noch nicht überarbeitet/bzw. optimiert)
jasocul - Mo 21.01.08 17:18
Du machst das über die Zwischenablage? :shock:
Hoffentlich benutzt keiner der 40 Anwender die Zwischenablage für eigene Dinge.
MarcRB1975 - Di 22.01.08 15:04
Aber über die Zwischenablage würde ich persönlich das auch nicht machen.
Aber so wie es aussieht, benötigst du die Zwischenablage nur "kurzfristig".
Du löscht vorher ja die Zwischenablage und liest dann "den" Text ein. Wenn ich das so richtig verstanden habe.
Ich hab das mir angesehen, aber wenn ich ehrlich bin: ich wüsste auch nicht, wie man das realisieren könnte. Ich persönlich würde das halt nicht so lösen.
Die "Texte" werden sich ja auch mit Sicherheit ändern und müssen immer zur Verfügung stehen. Möchtest Du jedesmal den Code dann ändern müssen, weil ein Text geändert werden muss?? Ich arbeite z.B. sehr viel mit Datenbanken. Oder Du speicherst Deine Texte in TXT-Dateien oder ähnlichen ab.
Naja... wenn du das mit Hotkey´s lösen möchtest... mhhh... ich wüsste nicht, wie man das lösen sollte.
Grundsätzlich stehen für "DAUERTEXTE" doch auch noch die Comboboxen, Listboxen ect zur Verfügung. IDEE: Falls du das mit den Keys nicht hinbekommst, schreib deine Texte in z.B. eine Combobox. Wenn dann z.B. der Nutzer im Editfeld eine Zahl ein gibt, wird automatisch dann der Text ins Editfeld eingetragen, weill wenn das Editfeld z.B. die zahl 5 hat, sucht sich automatisch die Combo den Text heraus. Oder gleich direkt die Combobo/-oder Listboxen nehmen. Naja... halt so eine Idee. Aber ich vermute, dass möchtest du auch nicht, weil du u.a. auch von Memos gesprochen hast. Und das würde ja bedeuten, dass wenn du während des Schreibens im Memo Alt+A drückst, ein fertiger Text automatisch ins Memo eingefügt werden soll. Oder?? Sorry, dass ich dir nicht wirklich helfen konnte.
Vielleicht ist ja das was für Dich? Vielleicht bringt dich das etwas weiter?
http://www.delphi-treff.de/tipps/system/tipp/522/
MarcRB1975 - Di 22.01.08 15:09
:think:
Ahh... du könntest das aber jetzt vielleicht trotzdem lösen, indem, wenn du im Edit oder Memo z.B. Alt+A drückst, der Text trotzdem aus der Combobox herausgelesen und eingefügt werden kann. Und die Texte selbst, die in der Combo sind, kannst du ja per txt speichern und ändern. Wie wär das?? :zwinker:
DrRzf - Do 24.01.08 02:46
das clipboard könntest du ganz leicht umgehen wenn du dir eine globale variable als text deklarierst.
und zum einfügen die aktive compo suchen und dort inserten.
covel - Do 24.01.08 09:51
Moin,
besten dank für die Ratschläge. Die Texte sind Benutzer spezifisch und werden in einer DB gespeichert.
Mein momentaner Lösungweg ist nicht der schönste (Clipboard als Zwischenablage und "strg+v" über virtuelle Tasten). Ich werden in den nächsten Tagen mal eure ideen aufgreifen und nen bischen testen.
MarcRB1975 - Fr 25.01.08 14:52
Ich dachte mir schon fast, dass die Text in der Datenbank sind.
Ich weiß trotzdem nicht, ob Dein Weg über die "virtuellen" Tasten der ideale Weg ist.
Denn die Belegung der Tasten ist begrenzt. Es gibt halt nur eine bestimmte (max) Anzahl von Kombinationen. Und ich könnte mir vorstellen (??) dass die Text vielleicht mit der Zeit mehr werden könnten. Oder bestimmte Text sollen nur für einen bestimmten Zeitraum gelten. Aber aus der DB sollen diese trotzdem nicht gelöscht werden.
Sollte man nicht dabei flexibel genug sein, die Text auf x-beliebige Möglichkeiten erweitern zu können? Irgendwann wäre halt mal Schluss mit den Möglichkeiten auf Grund der Tastenkombinationen. Oder?
Ich kenn sowas ähnliches, indem man z.B. ein sep. Editfeld hatte und eine Nummer eingeben musste. Diese Nummer hatte dann den Text hinzugefügt, der dieser Nummer zugewiesen wurde.
Naja... so halt, wie ich vorher schon mal geschrieben hatte. Es ist ja, oder es wäre ja kein Problem, das so lösen. Naja... vielleicht wäre diese Lösung was für Dich??
Ich wünsche dir viel Erfolg, eine ideale Lösung zu finden.
Wenn mir noch was Anderes einfallen sollte, schreib ich dir.
Gruß
Marc
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!