Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Daniel's Unstoppable Copier

  Alt 24. Jan 2005, 02:25
Puh. "vom gut lesbar Status weit entfernt" ist gut. Noch nicht mal in der Nähe würde ich sagen. Keine Kommentare nichts. Und deine Kopier-Routine bleibt mir ein Rätsel.

Im Anhang die überarbeitet Version, was die Icons im Listview angeht. Um den Rest habe ich mich nicht gekümmert, bis auf die Tatsache, dass ich deine zwei Ditzend überflüssigen Variablen entfernt habe und die Warnungen behoben habe, damit ich sehe, welche warnungen und Hinweise von meinem Code verursacht werden. Dass der Compiler Hinweise und Warnungen ausgibt hat schon seinen Sinn. Und gerade Warnungen würde ich nicht unbeachtet lassen.

Delphi-Quellcode:
{*************************************************************

  Luckie:
  So habe mal etwas geändert und verbessert.

  1.) Prozedur MakeColumns für die Spalte vom Listview.
  2.) Eigene Prozedur geschrieben, um Statusinformationen
      im Listview anzuzeigen (AddStatus). Deine war
      unbrauchbar. Du hast irgendwie jedes mal die Bitmaps
      wieder zur ImageList hinzugefügt oder so. Das braucht
      man nur einmal beim Erstellen der ImageListe. Siehe
      dazu Code in WM_CREATE.
      AddStatus erwartet als ersten Parameter die Status-
      meldung und als zweiten den IconIndex aus der Image-
      liste, das angezeigt werden soll. Dabei beginnt die
      Zählung bei null!
      Musst du mal gucken, ob das so passt, wie du es dir
      vorstellst.
  3.) Man sollte keine hardgecodeten Zeichenkettenkonstanten
      benutzen. Statt dessen entweder richtige Konstanten
      nehmen oder besser, falls die Anwendung mal lokalisiert
      werden muss, Resourcenstrings, diese werden in die
      Ressource einkompiliert.
  4.) Dutzende von überflüssigen Variabeln entfernt.
      (Hinweise und vorallem Warnungen spuckt der Compiler
      nicht aus, um nicht beachtet zu werden!!!)

  Sonstige Anmerkungen:
  1.) Deaktiviere die Schaltflächen, wenn sie nicht
      angeklickt werden sollen / dürfen. Ist anwender-
      freundlicher und erspart dir Code, um Fehler
      abzufangen.
  2.) Existiert die zu kopierende Datei nicht, bekommst du
      hier:
      j := x * 100 div GetFileSize(source);
      eine Exception. Prüf vorher, ob die Datei existiert
  3.) Wo wird hinkopiert, wenn das Verzeichnis nicht
      existiert?
  4.) In der Execute Methode deines Threads fehlt jegliche
      Fehlerbehandlung.
      Es wird nicht geprüft, ob die Datei oder das
      Zielverzeichnis existiert.
      Es werden nur schön Statusmeldungen ausgegeben, wenn
      etwas geklappt hat, aber was wird ausgegeben, wenn
      was schief gelaufen ist? Nichts.
  5.) Dein Thread wird nie terminiert. Daher ist ein
      zweiter Kopiervorgang nie möglich. Selbst das Klicken
      auf "Abbrechen" terminiert anscheinend den Thread nicht.
  6.) Es gibt immer eine schöne AccessViolation beim
      Beenden. Darum habe ich mich aber jetzt nicht
      gekümmert.
  7.) Bei jeder Datei, die ich kopiert habe konnten 49152
      Bytes angeblich nicht gelesen und kopiert werden.
  8.) Die kopierte Datei ist größer, als die ursprüngliche
      Quelldatei?!? Wie kannst du mehr kopieren, als
      vorhanden ist?
  9.) Warum nonVCL, wenn du die Dickemacher (SysUtils, Classes)
      doch benutzt?
      Wenn ich deinen Kopier-Code verstehen würde, würde
      ich mal eben ein Version ohne die TThread-Klasse
      machen.
  10.) Übergib dem Thread Quelldatei und Zielverzeichnis
      als Paramter und hol sie nicht in der Execute
      Methode aus den Edits.


*************************************************************}
Änderungen von mir im Code sind mit
// Luckie gekennzeichnet. Das steht immer über der Änderung. Ganze Prozeduren habe ich mit einem Prozedur-Header versehen.
Angehängte Dateien
Dateityp: zip duc_459.zip (80,6 KB, 50x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat