![]() |
AW: Datenformular Oberfläche
Danke Ihr zwei, jetzt hab ichs. Das mit Drawtext war mir einfach entgangen :)
|
AW: Datenformular Oberfläche
Guten Abend, ich bin es nochmal :(
Es tut mir leid, dass ich euch schon wieder mit Fragen zu diesem Thema löchere, hatte eigentlich gehofft, jetzt allein weiterzukommen. Aber bei meiner Stringgrid gibt es noch ein Problem, mit dem ich nicht fertig werde. Ich möchte die Eingaben des Nutzers kontrollieren, wenn er eine Zelle Editiert (in manchen Zellen sind beispielsweise nur die Werte 1,2,3 erlaubt). Bisher habe ich das mit SetEditText abgefangen, aber wenn die Zelle noch leer ist und der Benutzer sie gerade erst anklickt kommt eine Fehlermeldung, da die leere Zelle weder den Wert 1 noch 2 oder 3 hat. Ich bräuchte also ein Event, welches erst ausgelöst wird, wenn der Nutzer mit seiner Bearbeitung fertig ist. Aber es gibt sowohl unterschiedliche Eingabemöglichkeiten - direkt über das Programm, manuell vom Nuter oder STRG+V (Was ich mit OnKeyDown abfange und dann auf alle selektierten Zellen übertrage, damit bin ich auch nicht wirklich zufrieden, es funktioniert manchmal nämlich aus irgendeinem Grund nicht...) - als auch verschiedene Arten, das Editieren zu beenden (Selektion eines anderen Feldes, Tab, Enter, Selektion eines anderen Objekts oder sogar Form/Programms...), dass ich es, egal wie ich es auch versuche, nie schaffe, alle Möglichkeiten sauber und zuverlässig abzufangen. Ich habe schonmal nach "On Edit" und ähnlichem gesucht, konnte aber leider nicht viel hilfreiches finden. Auf ![]() ![]() |
AW: Datenformular Oberfläche
Nabend ...,
der InplaceEditor arbeitet manchmal, sagen wir mal, gewöhnungsbedürftig ;) Aber ich halte den Ansatz, Eingaben bzw. rein kopierte Strings über den Editor zu filtern, für falsch. Ich würde generell auf den Editor verzichten und zb. bei Doppelklick ein separates 'Eingabefenster' öffnen. In diesem könntest du dich austoben, danach würde ich die gemachten Eingaben prüfen, bearbeiten was auch immer und gleich in die Db wegsichern und erst dann die markierten Zellen schreiben. Edit: ok, Doppelklick ist natürlich blöd bei Mehrfachauswahl 8-) also solltes du dann ne bestimmte Taste abfangen zum öffnen des Eingabefensters zb. Tab oder zirkumflex oder so. |
AW: Datenformular Oberfläche
Der Plan war aber (Da die Stringgrid sehr groß werden kann), dass man beliebig viele Zellen markieren kann und dann in alle markierten gleichzeitig schreibt/kopiert etc...
Oder hab ich Dich falsch verstanden? *Edit* Wie meinst du das denn mit dem separatem Eingabefenster? Wenn wirklich ein neues Fenster dafür aufgeht verliert man ja die Übersicht... Außerdem ist es sehr wichtig, dass alles möglichst schnell geht |
AW: Datenformular Oberfläche
Ich glaube du denkst zu kompliziert.
Ich meinte: Du markierst alle zu editierenden Zellen wie bisher, aber statt den InplaceEditor zu benutzen öffnest du ein neues Eingabefenster, machst die Eingabeoperationen und schließt des wieder. Beim schließen wird die Db geschrieben sowie die Eingaben an das Grid weitergereicht. Dieses besagte Eingabefenster musst du natürlich selbst erstellen, praktisch dein eigener Editor. der Vorteil ist natürlich das du des auf deine Bedürfnisse quasi massschneidern kannst. Edit: vielleicht könntest du ein Demo von deinem programm kurz hier anhängen. Ich kann mir ehrlich gesagt immer noch net vorstellen wie du die tausende zellen darstellst. |
AW: Datenformular Oberfläche
So, nach ein bisschen basteln funktioniert es jetzt (fast) wie gedacht. Jetzt muss ich es nur noch schaffen, dass die Selektion bei Doppelklick/Enter nicht aufgehoben wird.
Vielen Dank nochmal für Deinen Tipp, dank Dir ist endlich der Groschen gefallen. Manchmal fragt man sich wirklich, wieso man es nicht gleich so gemacht hat :) *Edit* Achja. Ich hab für das Eingabefenster ein Edittextfeld umfunktioniert - es klappt auch -, aber wenn ich Enter drücke kommt immer ein Fehlermeldungsgeräusch, das ist etwas seltsam. Ist mir aber schon mehrfach bei Edittexten aufgefallen |
AW: Datenformular Oberfläche
Delphi-Quellcode:
Sollte so funktionieren.
procedure TForm1.DeinSGKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if (Key = VK_RETURN) then begin frm_Eingabe.Show; // eigenes Editorfenster end; end; Edit: Du solltest das Eingabefenster aber Modal anzeigen. |
AW: Datenformular Oberfläche
So ähnlich siehts bei mir auch aus. Nur, ähm, modal? :?
|
AW: Datenformular Oberfläche
MyForm.ShowModal => Das Formular bekommt alle Maus- und Tastenereignisse exklusiv, bis man es schließt.
MyForm.Show => Das Formular ist sichtbar und bekommt alle Maus- und Tastenereignisse, wenn man es selektiert (anklickt). |
AW: Datenformular Oberfläche
Zitat:
Delphi-Quellcode:
procedure TFormMain.Edit_FeldKeyPress(Sender: TObject; var Key: Char);
begin IF Key = #13 THEN BEGIN IF TextIstZahl(Edit_Feld.Text) THEN BEGIN Do.Something; // oder mach was anderes ... Do.AnotherThing; // ... weise irgendwas irgendwem zu oder mach was du willst ... ELSE ShowMessage('fehlerhafte Eingabe: Nur Ziffern erlaubt ...'); END; Key := #0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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