Autor |
Beitrag |
covel
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mo 21.01.08 13:06
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
      
Beiträge: 131
XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
|
Verfasst: 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.
_________________ Sokrates: "Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: 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.
www.swissdelphicente...showcode.php?id=2375
|
|
MarcRB1975
      
Beiträge: 131
XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
|
Verfasst: 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??
_________________ Sokrates: "Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: 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.
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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mo 21.01.08 17:18
Du machst das über die Zwischenablage?
Hoffentlich benutzt keiner der 40 Anwender die Zwischenablage für eigene Dinge.
|
|
MarcRB1975
      
Beiträge: 131
XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
|
Verfasst: 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?
www.delphi-treff.de/tipps/system/tipp/522/
_________________ Sokrates: "Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
MarcRB1975
      
Beiträge: 131
XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
|
Verfasst: Di 22.01.08 15:09
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?? 
_________________ Sokrates: "Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
DrRzf
      
Beiträge: 260
Win XP Prof
D7 Enterprise
|
Verfasst: 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.
_________________ rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: 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
      
Beiträge: 131
XP, Windows7
Delphi 2005 PE, Turbo, RAD Delphi 2009, XE, XE2
|
Verfasst: 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
_________________ Sokrates: "Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
|