AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Benutzerführung

Ein Thema von Delbor · begonnen am 13. Jun 2017 · letzter Beitrag vom 23. Jun 2017
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Benutzerführung

  Alt 13. Jun 2017, 16:58
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:
  • per Rechtsklick im erscheinenden Popup auf 'Kategorie erstellen' klicken und einen Namen im erscheinenden Dialog eingeben oder
  • in der Werkzeugleiste einen neuen Kategoriennamen eingeben oder einen bestehenden aus einer Combobox auswählen
Vergisst der User, mit einer er beiden Möglichkeiten eine Kategorie für die Aufnahme der Bilder in die DB festzulegen, geht diese dann schief, wenn das Programm versucht, eine nicht bestehende Kategorie in die DB zu schreiben - was mir bei Testläufen auch schon passiert ist.
Diese Fehlerquelle möchte ich nun beseitigen.
Mein bisheriger Ansatz ist:
  • Mein Pathfinder zeigt die Ordner und Unterordner an, in denen die Bilder liegen. Dabei ist der gewissermassen oberste Bildordner nach dem Thema der enthaltenen Bilder benannt. Weitere Unterordner sind nach den Bildformaten benannt: jpeg, NEF und BMP.
  • In einer Listbox führe ich sämtliche Treeview-Klicks auf, die der User tätigt.
  • Angedacht ist: In der im Jpeg gezeigten Auswahl ist der nach dem Thema benannte Ordner der zweitunterste. Diesen könnte der User anklicken und so in einem Edit anzeigen.
  • Hier kann der User nun einen neuen Namen eingeben oder den angezeigten ganz oder teilweise übernehmen.
  • Wichtig ist dabei: Der User kann den OK-Button erst drücken, wenn eine Kategorie festgelegt 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
Miniaturansicht angehängter Grafiken
dateiauswahl-2.jpg   dateiauswahl.jpg  
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#2

AW: Benutzerführung

  Alt 13. Jun 2017, 18:18
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.

Wenn etwas gefüllt sein muß, dann solltest du das einfach prüfen, bevor es knallt.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Benutzerführung

  Alt 13. Jun 2017, 20:15
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#4

AW: Benutzerführung

  Alt 13. Jun 2017, 21:00
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
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Benutzerführung

  Alt 23. Jun 2017, 13:56
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:
  try
    AllowExpansion := not FileSearcher1.Busy;
    FileSearcher1.Recursive := False;
    FileSearcher1.SearchType := stBoth;
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.

Nicht so in der Unit des Containerframes:
Delphi-Quellcode:
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;
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.
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Benutzerführung

  Alt 23. Jun 2017, 15:04
Hallo,

Zitat:
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...
Was ist denn explizit adressieren?
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.
Heiko
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Benutzerführung

  Alt 23. Jun 2017, 15:13
Hi hoika

Vielen Dank für deine Antwort!
Zitat:
Nimm die Unit als letztes, die deine gewünschte stBoth enthält.
Ich hätte schwören können, dass Vcl.ComCtrls vor den Units des Filesearchers eingebunden ist, hab mir das aber auf deine Antwort hin trotzdem nochmal angesehen...

Man soll halt niemals schwören...

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz