tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von CSANecromancer
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
1803
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Power-Poler Power-Poler ist offline Mitglied
    Registriert seit
    Aug 2007
    Beiträge
    20
    Hi
    Ich habe volgendes Problem, und zwar würde ich gerne eine ComboBox mit Datein, Automatisch, also wenn eine dazu kommt, das die auch geaddet wird, fühlen.

    Ich habe da zwar einen Befehl gefunden, aber irgenwie weis ich nicht, was der von mir erwartet
    Code :
    1
    
    ComboBox1.GetNamePath
    Was muss ich da hinten dran schreiben, das es funtzt?
    Also vorstellen, tu ich mir das so wie in einer FileListBox
    Danke im Voraus
    MfG
    Power-Poler
     

  2. #2
    Registriert seit
    Mar 2004
    Beiträge
    441
    Also ich sage mal ganz blauäugig: Mit GetNamePath kommst du schon mal gar nicht weiter. Ich habe eine ähnliche Funktion hier in meinem Projekt, die ich mal etwas umgeschrieben und kommentiert habe. Ich sollte noch anmerken, dass das Ganze für Delphi .net ist und für reines Delphi w32 evtl. die Methodenparameter angepasst werden müssen.
    Code delphi:
    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
    
    procedure TIrgendeineKlasse.GetAvailableFiles(pComboBox: TComboBox);
    var
      lDir: String;                   // Startverzeichnis für die Filesuche
      lSearchRecord: TSearchRec;      // zum Suchen selbst
    begin
      // Wenn ich schon nach den verfügbaren Dateien suche, dann will ich aber
      // keine doppelten Einträge von vorherigen Dateisuchen
      pCombobox.Clear;
     
      // Ich suche nur im gleichen Verzeichnis, in dem auch die EXE meines
      // Programms läuft
      lDir := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
     
      // Existiert überhaupt irgendeine Datei im gewünschten Format?
      // (hier eine EXE-Datei).
      if FindFirst(lDir + '*.exe', faAnyFile, lSearchRecord) = 0 then
      begin
        repeat
          if (lSearchRecord.Attr <> faDirectory) then
            pComboBox.Items.Add(lSearchRecord.Name);
        until FindNext(lSearchRecord) <> 0;
     
        // Suche abschliessen
        FindClose(lSearchRecord);
      end;
    end;

    Aber jetzt kommt es natürlich vollkommen darauf an, wann die Methode aufgerufen wird. Du willst ja, dass sich die Combobox quasi "von selbst" aktualisiert. Aber dieses "von selbst" sollte schon etwas genauer bestimmt sein.
    Eine Möglichkeit ist, die Application.OnIdle zu überschreiben (Suchworte: +Delphi +OnIdle) und innerhalb der neuen OnIdle die Methode auszuführen. Dann würde deine Combobox immer dann aktualisiert werden, wenn dein Programm gerade nichts zu tun hat. Klassischesr Einsatz: Aktualisierung eines Statusbars.

    Alternativ (wenn die Aktualisierung deiner ComboBox wirklich richtig dringend und wichtig ist) lassen sich auch speziell für diesen Task Resourcen verbraten und ein Timer einsetzen. (Suchworte: +Delphi +TTimer). Einfach obige Routine in die Ereignismethode des Timers packen und schon kannst du bestimmen wann und wo nach neuen Methoden gesucht wird.
    Klassischer Einsatz: Timer zum automatischen Logout nach einer gewissen Inaktivität bei einem Usermanagement.

    Als weitere Möglichkeit fiele mir noch die OnDraw-Methode des der ComboBox übergeordneten Formulars ein. Da ist aber u.U. ein bißchen Gebastel notwendig, damit es zu keiner Null Pointer-Exveption kommt (Create, FreeAndNil).
    Klassischer Einsatz: Alles mögliche, was auf dem Formular angezeigt wird. Ist fast so etwas wie eine Standard-Refresh-Art.

    Ich persönlich würde in diesem Falle wohl die OnIdle-Methode verwenden.
    Power-Poler bedankt sich. 

  3. #3
    Power-Poler Power-Poler ist offline Mitglied
    Registriert seit
    Aug 2007
    Beiträge
    20
    Hi
    Danke für die Antwort, es geht!
    Ich möchte jetzt aber gerne, das er nicht da sucht, wo die exe ist, sondern in einem Vorgegebenen Order, wo muss ich das dan hineinschreiben?
    Villeicht ist die lösung ganz einfach, aber ich bin nicht so der Pro in Delphi. (Habe erst angefangen).
    Edit: Habs doch noch gefunden.
    Danke nochmals, jetzt kans weitergehn.
    Mit der Aktualisirung, habe ich gemeint: Immer wenn ein neues File geschrieben wird, soll das hinzugefügt werden.

    So, jetzt stehe ich schon vor dem nächsten Problem, bei dem du mir hofendlich weiter helfen kanst:
    Ich will, dass wenn man eine gefundene Datei darin anklickt, diese erkannd wird, und in einer Variableb gespeichert wird:
    Code :
    1
    
    filename := FileListBox1.FileName;
    Also das er wie bei einer FileListBox das addet. Ich finde leider keinen Befehl dafür, der dies so wie im code fenster ausführt.
    Geändert von Power-Poler (20.02.08 um 16:29 Uhr)
     

  4. #4
    Registriert seit
    Mar 2004
    Beiträge
    441
    Zitat Zitat von Power-Poler Beitrag anzeigen
    Hi
    Mit der Aktualisirung, habe ich gemeint: Immer wenn ein neues File geschrieben wird, soll das hinzugefügt werden.
    Und woran EXAKT soll dein Programm erkennen, ob eine Datei geschrieben wurde oder nicht?
    Soll dein Programm sämtliche Plattentätigkeit überprüfen?
    Oder steht nur ein bestimmtes Verzeichnis zur Überprüfung an?
    Gibt es irgendwelche anderen Merkmale außer dem direkten Directory, anhand derer man feststellen könnte, dass eine neue Datei zur Sammlung dazu gekommen ist?

    Zitat Zitat von Power-Poler Beitrag anzeigen
    Ich will, dass wenn man eine gefundene Datei darin anklickt,
    Was ist "darin"?

    Zitat Zitat von Power-Poler Beitrag anzeigen
    diese erkannd wird,
    Was verstehst du unter "erkannt"?

    Zitat Zitat von Power-Poler Beitrag anzeigen
    Also das er wie bei einer FileListBox das addet.
    Was meinst du mit "das"?

    Zitat Zitat von Power-Poler Beitrag anzeigen
    Ich finde leider keinen Befehl dafür, der dies so wie im code fenster ausführt.
    Welchem Codefenster?

    Ehrlich: Drück' dich mal präziser aus, dann kann ich dir evtl. auch weiterhelfen. Wie soll ich genaue Hilfestellung bei solch ungenauen Angaben leisten?
     

  5. #5
    Power-Poler Power-Poler ist offline Mitglied
    Registriert seit
    Aug 2007
    Beiträge
    20
    1. Es wird nur eine *.ini in einem Bestimmten Verzeichnis erzeugt, sobald man den Kopf für Speichern drückt. Also immer wenn der Knopf gedrückt wird, soll sich die liste Aktualisiren.
    2. Wenn man in der ComboBox auf eine der geaddeten dateien klickt, so dass diese "Aktiv" wird, also, wenn sie oben in der ComboBox steht.
    3. Das diese ausgewählte Datei als Ausgewählte Datei aktzebtiert wird, und der Name in einer Variablen gespeichert wird, das ich im weiteren Verlauf des codes sagen kann: "Lies den Inhalt".
    4. Bei einer FileListBox ist der Befehl dafür ja: "FileName", aber sowas steht bei einer ComboBox leider nicht zu verfügung.
    Sorry, dass ich mich so unverständlich ausgedrückt habe, hoffe jetzt ist es genauer beschrieben.
    Danke, fals du mir immer noch helfen wilst.
     

  6. #6
    Registriert seit
    Mar 2004
    Beiträge
    441
    Na, dann wollen wir mal...
    Zitat Zitat von Power-Poler Beitrag anzeigen
    1. Es wird nur eine *.ini in einem Bestimmten Verzeichnis erzeugt, sobald man den Kopf für Speichern drückt. Also immer wenn der Knopf gedrückt wird, soll sich die liste Aktualisiren.
    Na perfekt. Dann lässt sich ja der entsprechende Aufruf leicht in die OnButton-Methode einbauen und die brauchst nicht großartig die ganze Festplatte kontrollieren.
    Das würde dann ungefähr so aussehen:
    Code delphi:
    1
    2
    3
    4
    5
    6
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      { mache irgendwas, wenn auf deinen Button geklickt wurde }
      ...
      GetAvailableFiles(ComboBox1);
    end;

    Zitat Zitat von Power-Poler Beitrag anzeigen
    2. Wenn man in der ComboBox auf eine der geaddeten dateien klickt, so dass diese "Aktiv" wird, also, wenn sie oben in der ComboBox steht.
    Ah, ok.
    Das funktioniert bei einer TComboBox einerseits über TComboBox.ItemIndex, andererseits über TComboBox.Text. In beiden Fällen ist die Onlinehilfe dein Freund (auch wenn leider keine Sourcebeispiele mehr drin enthalten sind).

    Zitat Zitat von Power-Poler Beitrag anzeigen
    3. Das diese ausgewählte Datei als Ausgewählte Datei aktzebtiert wird, und der Name in einer Variablen gespeichert wird, das ich im weiteren Verlauf des codes sagen kann: "Lies den Inhalt".
    Da ginge Folgendes:
    Code delphi:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    type TForm1 = class(TForm)
    published
      SelectedFile: String;
     
    ...
     
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      if ComoBox1.ItemIndex <> -1 then
        TFrom1.SelectedFile := ComboBox1.Items[ComboBox1.ItemIndex]
      else
        TForm1.SelectedFile := '';
    end;

    alternativ:

    Code delphi:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    type TForm1 = class(TForm)
    published
      SelectedFile: String;
     
    ...
     
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      TFrom1.SelectedFile := ComboBox1.Text;
    end;


    Zitat Zitat von Power-Poler Beitrag anzeigen
    4. Bei einer FileListBox ist der Befehl dafür ja: "FileName", aber sowas steht bei einer ComboBox leider nicht zu verfügung.
    Dafür steht bei einer TComboBox der ausgewählte Inhalt im Property Text, also z.B.
    Code delphi:
    1
    
    Filename := ComboBox1.Text;
    Geht aber eben auch über den ItemIndex. Viele Wege führen nach Rom.

    Abseits dieser Thematik möchte ich dir dann aber noch etwas ans Herz legen:
    Wenn du im Forum was schreibst, lies mal bitte wirklich, was da oberhalb des Eingabefensters in fetter roter Farbe steht. Danke.
     

  7. #7
    Power-Poler Power-Poler ist offline Mitglied
    Registriert seit
    Aug 2007
    Beiträge
    20
    Danke für deine Hilfe, meine ComboBox funktioniert jetzt so wie sie soll.
    Fals du meine Rechtschreibung bemängelst, bin legasteniker, und habe zurzeit kein Word oder Sonstiges auf dem PC um eine Rechtschreibprüfung laufen zu lassen.
     

  8. #8
    Registriert seit
    Mar 2004
    Beiträge
    441
    Legasthenie ist eine Sache, aber man kann doch trotzdem vollständige Sätze ausformulieren, auch wenn nicht zwingend jeder Buchstabe am richtigen Platz ist, oder?
    Und ja - darauf hatte ich angedeutet.
     

Ähnliche Themen

  1. txt.datein per DragDrop in combobox ziehen!
    Von MOONLIGHT im Forum .NET Windows Forms
    Antworten: 5
    Letzter Beitrag: 03.01.11, 20:44
  2. VB Datein und Ordner kopieren (FSO) mit Fortschrittsanzeige
    Von bernimoses im Forum Visual Basic 6.0
    Antworten: 8
    Letzter Beitrag: 11.09.08, 19:36
  3. Datein auslesen aus einem Ordner
    Von Miles21 im Forum .NET Archiv
    Antworten: 5
    Letzter Beitrag: 17.06.05, 13:07
  4. Ordner mit datein und Unterordner kopiern
    Von AlexanderLind im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 23.09.04, 23:03
  5. Datein in einem Ordner
    Von Alexxx im Forum PHP
    Antworten: 5
    Letzter Beitrag: 16.11.03, 13:18