AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

Ein Thema von Gustav.R · begonnen am 10. Feb 2012 · letzter Beitrag vom 11. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
Popov
(Gast)

n/a Beiträge
 
#1

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 10. Feb 2012, 23:46
Wenn, dann im Reiter Beispiele.
  Mit Zitat antworten Zitat
Gustav.R
(Gast)

n/a Beiträge
 
#2

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 00:03
#NV (Nicht Verfügbar (in Delphi5))

Wozu ist das

ofNoChangeDir := true

eigentlich gut, wenn es gerade nicht das verhindert, was man (ich halt) davon erwartet?

Verwirrte Grüße
G

Geändert von Gustav.R (11. Feb 2012 um 00:10 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 00:28
Was ich oben gesagt habe:

Zitat:
Bei OpenDialog gibt es die Möglichkeit nach dem Öffnen zurück zum Standardordner zurück zu kehren.
Wenn du dich in OpenDialog in Ordnern bewegst, egal wo du bist, bei nächsten Start ist er wieder im eingestellten Ordner.
  Mit Zitat antworten Zitat
Gustav.R
(Gast)

n/a Beiträge
 
#4

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 00:36
Und wie ich oben schon schrub:

"Der Anwender soll erst garnicht in einen anderen Ordner gehen dürfen, das ist das Problem - nicht die Fehlermeldung danach..." oder das Zurückwechseln in diesen Ordner.

Der Anwender soll und darf nur im festgelegten Ordner speichern oder öffnen dürfen, darum geht's mir...

GG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 00:44
Der Anwender soll und darf nur im festgelegten Ordner speichern oder öffnen dürfen, darum geht's mir...
Und genau das kann man auch sicherstellen, selbst wenn der Benutzer im Dialog das Verzeichnis wechseln könnte.

Anderes Beispiel:
Bei einem Edit kann man auch erst im OnExit prüfen, ob die Eingabe gültig ist, anstatt im OnChange.
Wenn man das schon wärend der Eingabe prüft, könnte es einige Probleme geben.
z.B. prüfe mal, ob jemand eine gültige Zahl eingibt, wie z.B. "12,34".

"" = ungültig
"1" = gültig
"12" = gültig
"12," = ungültig
"12,3" = gültig
"12,34" = gültig

Und jetzt verrate mir mal einer, wie man dort jetzt diese Zahl eingeben soll?
"1234" und nachträglich das Komma rein?
Und was macht man, wenn schon "9" drinsteht? (rauslöschen und neu anfangen geht nicht)


Gut, hier hat nicht der Benutzer das Problem, sondern du, aber egal.
Man kann sich das Leben auch unnötig schwer machen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Feb 2012 um 00:51 Uhr)
  Mit Zitat antworten Zitat
Gustav.R
(Gast)

n/a Beiträge
 
#6

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 01:00
Zitat:
Gut, hier hat nicht der Benutzer das Problem, sondern du, aber egal.
Man kann sich das Leben auch unnötig schwer machen.

Im Notfall gibt es noch TFileListBox
Schrub ich doch bereits in #7

Schluß für heute! Und warum gibt's hier eigentlich keinen versöhnlichen "Prost-Smiley"

Prost!
Angehängte Grafiken
Dateityp: gif icon_bier.gif (5,1 KB, 33x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 01:08
Schluß für heute! Und warum gibt's hier eigentlich keinen versöhnlichen "Prost-Smiley"
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Gustav.R
(Gast)

n/a Beiträge
 
#8

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 00:47
@himitsu: Danke für den Qualtext (der unter D5 nicht kompilieren wird). Aber warum sollte ich dem Anwender in anderen Ordner nachschauen lassen, wenn er dort sowieso nicht speichern darf?

LG
Gustav
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 00:49
Warum darf ich in WinNT (als nicht Administrator) z.B. im Speicherndialog Verzeichnisse wie C:\Programme oder C:\Windows auswählen, auch wenn ich dort nicht speichern darf?

Im Notfall gibt es noch TFileListBox

Zitat:
der unter D5 nicht kompilieren wird
Und warum nicht?
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Feb 2012 um 00:51 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: Open- und SaveDialoge sollen nur Dateien (keine Ordner) anzeigen

  Alt 11. Feb 2012, 00:51
Ich habe auf die Schnelle etwas zusammengestellt. Du brauchst nur eine Listbox. Mit GetFiles werden die Dateien mit Pfad eingelesen. In DrawListBox wird es auf Dateinamen gekürzt und das passende Icon davorgezeichnet. Und siehe da, eine DateiListBox.
Delphi-Quellcode:
uses
  ShellApi;

//Liefert Datei-Liste ohne Unterordner
procedure GetFiles(Path, ExtMask: String; List: TStrings);
var
  Attrib, k: Integer;
  Search: TSearchRec;
begin
  if Path[Length(Path)] <> '\then Path := Path + '\';

  Attrib := faArchive + faReadOnly + faHidden;

  while Copy(ExtMask, 1, 1) = '.do
    Delete(ExtMask, 1, 1);

  if FindFirst(Path + '*.' + ExtMask, Attrib, Search) = 0 then
  repeat
    List.Add(Path + Search.Name);
  until FindNext(Search) <> 0;

  FindClose(Search);
end;

function GetIconFromFile(const szFilename: string;
  fSmall: boolean = false): TIcon; {uses ShellApi}
const
  dwIconFlags : array[boolean]of dword =
    (SHGFI_LARGEICON,SHGFI_SMALLICON);
var
  fi : TSHFileInfo;
begin
  Result := nil;

  // Symbol der Datei aus dem System ermitteln
  // Typ (= groß/klein) richtet sich nach dem
  // Funktionsparameter "fSmall" (default = false)
  ZeroMemory(@fi,sizeof(fi));
  SHGetFileInfo(pchar(szFilename),0,fi,sizeof(fi),
    SHGFI_ICON or dwIconFlags[fSmall]);

  // Symbol ermittelt
  if(fi.hIcon <> 0) then
  begin
    Result := TIcon.Create;
    if(Result <> nil) then
      Result.Handle := fi.hIcon;
  end;
end; {by MathiasSimmack}

procedure DrawListBox(Control: TWinControl; Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
const
  Col1: array [Boolean] of TColor = (clWindow, clWindow); //Zebra-Wunschfarben
  Col2: array [Boolean] of TColor = (clInactiveCaptionText, clWindowText);
var
  TopDifTxt, TopDifIco: Integer; // Gleicht die Höhendifferenz aus
  Icon: TIcon;
begin
  with (Control as TListbox) do
  begin
    if odSelected in State then Canvas.Font.Color := clCaptionText else begin
      Canvas.Brush.Color := Col1[Odd(Index)];
      Canvas.Font.Color := Col2[(Control as TListbox).Enabled];
    end;
    TopDifTxt := (ItemHeight div 2) - (Canvas.TextHeight(Items[Index]) div 2);
    TopDifIco := (ItemHeight div 2) - (16 div 2);

    Canvas.TextRect(Rect, Rect.Left + 20, Rect.Top + TopDifTxt,
      ExtractFileName(Items[Index]));

    Canvas.Draw(Rect.Left + 2, Rect.Top + TopDifIco,
      GetIconFromFile(Items[Index], True));
  end;
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  DrawListBox(Control, Index, Rect, State);
end;
Aufruf:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Style := lbOwnerDrawFixed; //kann bereits in Create eingestellt werden
  ListBox1.ItemHeight := 20; //kann bereits in Create eingestellt werden

  GetFiles('c:\windows', '*', ListBox1.Items);
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:55 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