![]() |
Benutzerführung
Liste der Anhänge anzeigen (Anzahl: 2)
Hi zusammen
Noch arbeite ich an meinem Testprogramm, mit dem ich inzwischen nicht nur die SQLite-Programmierung austeste, wie ursprünglich vorgesehen. Im Anhang zeigen zwei Jpegs die gestylte Oberfläche meines Testprogramms und diejenige, noch ungestylte, des Originalprojekts. Dieses hat einen Fehler in der Benutzerführung. Das Programm arbeitet mit einer Bilder-Datenbank zusammen und soll unter anderem auch Bilder, die auf Festplatte vorliegen, in die DB schreiben. Das erste, was dafür festgelegt werden muss, ist eine Kategorie. Das ungestylte Jpeg zeigt die Situation im Originalprojekt, kurz bevor mit einem Klick auf den OK-Button die Insert-Prozeduren gestartet werden. Das kann auf zwei Arten geschehen:
Diese Fehlerquelle möchte ich nun beseitigen. Mein bisheriger Ansatz ist:
Nur - zufrieden bin ich dabei nicht wirklich. Für weitere Ideen, wie sichergestellt werden kann, dass eine Kategorie festgelegt wird, bevor die Insert-Prozeduren starten, habt schonmal vielen Dank! Gruss Delbor |
AW: Benutzerführung
So richtig hab ich jetzt nicht verstanden, was du jetzt alles von uns möchtest.
Aber es klingt nicht so, als wenn das Problem bei der Benutzerführung sondern bei der Eingabeprüfung liegt. :angle: Wenn etwas gefüllt sein muß, dann solltest du das einfach prüfen, bevor es knallt. :zwinker: Also OnClick des OK-Buttons, bzw. besser im BeforePost deines DataSets. Und wenn da was fehlt, dann eben eine Fehlermeldung und einen Abort; um das Speichern abzubrechen. Vor dem Abort eventuell auch gleich den Fokus in das Edit setzen, wo die falschen/fehlenden Daten drin sind. |
AW: Benutzerführung
Hi Himitsu
Danke für deine Antwort! Da meine Datenbank 12 Tabellen enthält, für die jeweils eine eigene Insertprozedur existiert (die jeweils im selben Qery ausgeführt werden), müsste diese Prüfung spätestens vor Transaktionsstart durchgeführt werden - nur wenige Codezeilen nach dem Buttonklick. Also bietet sich eigentlich dieser Event für die Prüfung an. Hmm...Auf diese Weise müsste ich einen MessageDialog anzeigen, der eine Neueingabe oder eine Auswahl anbietet. Dagegen spricht, dass ich mit dem Anzeigen von Dialogen sehr zurückhaltend sein möchte. Gruss Delbor |
AW: Benutzerführung
Man kann notwendige Eingabefelder auch farbig markieren, wenn deren Eingaben fehlen oder (z.B. vom Format her) nicht passen. So spart man sich irgendwelche (blockierenden) Dialoge/Nachrichten an die Nutzer.
Grüße Dalai |
AW: Benutzerführung
Hi zusammen
Soweit habe ich eine gangbare Lösung gefunden. Die besteht in einem "Containerframe", der ein Pagecontrol mit 2 Tabsheets enthält. Wie auf den Eingangs geposteten Jpegs ersichtlich, befindet sich mein Pathframe auf einer TCategoryPanelGroup-Komponente - dahin kommt nun neu ein "Containerframe". Wird nun das CategoryPanel mit dem Containerframe angezeigt, präsentiert dieser das Tabsheet1 des PCtrl, auf dem eine Kategorie eingegeben oder, wenn vorhanden, ausgewählt werden kann. Erst, wenn dies erfolgt ist, kann mit 'Weiter' zu Tabsheet2 gewechselt werden, wo der Ordner mit den gewünschten Bildern ausgewählt und die Insert-Prozeduren gestartet werden können. Soweit, so gut. Leider hat dies einen kleinen Haken: Im TPathFinderFrame.TVPathExplorerExpanding-Event (TV=Treeview) lauten die ersten paar Zeilen:
Delphi-Quellcode:
TSearchType := stBoth stellt sicher, dass die Filesearcher nach Ordnern und Dateien sucht. Dazu sind unter uses die notwendigen FileSarcher-Units eingebunden, und so erkennt Delphi hier, dass stBoth eine Konstante aus der Unit FileSearch ist.
try
AllowExpansion := not FileSearcher1.Busy; FileSearcher1.Recursive := False; FileSearcher1.SearchType := stBoth; Nicht so in der Unit des Containerframes:
Delphi-Quellcode:
TbsKatName ist das Tabsheet, das der User zuerst zu sehen bekommt und in dem er eine bereits gewählte Kategorie bestätigen oder eine neue anlegen kann/muss. Die Tabs dieser Tabsheets sind nicht sichtbar - das Tabsheet kann also nur über einen Button-oder Menue-Event verlassen werden.
procedure TDlgFrameContainer.TbsKatNameShow(Sender: TObject);
begin Self.PathFinderFrame2.FileSearcher1.SearchType := stFolders; Self.BitBtn1.Caption := 'OK'; Self.BitBtn1.ImageIndex := 2; end; procedure TDlgFrameContainer.TbsPathFinderShow(Sender: TObject); begin Self.PathFinderFrame1.FileSearcher1.SearchType := stBoth; //>>= Self.BitBtn1.Caption := 'Weiter...' ; Self.BitBtn1.ImageIndex := 0; end; In TbsKatName soll PathFinderFrame2 nur nach Ordnern im Rootverzeichnis suchen - diese Zuweisung ist korrekt, und stFolder wird richtig als eine Konstante aus der Unit FileSearch erkannt. Spannender wirds aber mit der Konstante stBoth in TbsPathFinderShow - die erkennt Delphi als die Konstante stBoth aus VCL.ComControls.TSortType. Tja, und was nun? Explizit adressieren hat nichts gebracht, oder ich hab mein halbes dutzend versuche diesbezüglich alle falsch gemacht... Gruss Delbor |
AW: Benutzerführung
Hallo,
Zitat:
Es müßte doch reichen, den Unit-Namen davorzuschreiben, UnitX.stBoth? Ansonsten dreh in der Uses-Clause die Unit um. Nimm die Unit als letztes, die deine gewünschte stBoth enthält. |
AW: Benutzerführung
Hi hoika
Vielen Dank für deine Antwort! Zitat:
Man soll halt niemals schwören... Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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-2025 by Thomas Breitkreuz