AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CopyFileEx

Ein Thema von Luckie · begonnen am 7. Aug 2004 · letzter Beitrag vom 10. Mär 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: CopyFileEx

  Alt 8. Apr 2006, 17:39
Zitat von masadafish:
hi
ich wollt mich zunächst für das tolle beispiel bedanken
aber ich habe ein problem denn sobald ich datein die größer als ca 2gb sind kopieren will stimmt die progressbar nicht mehr da der progrssbar.max wert ja ein integer
ist und msg.lparam und msg.wparam ja auch "nur" integer sind ... steh ich jetz nur auf der leitung oder ist was wirklich schwierig?
also hat wer ne ahnung wie man das abändern kann das es auch mit größeren datein funzt?
Du könntest den aktuellen Fortschritt in Promille umrechnen und dann einfach fest Progressbar1.Max := 1000 nehmen. Speichere dazu einfach den Int64-Wert, den dir CEXM_MAXBYTES liefert. // wParam: lopart, lParam: hipart
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#12

Re: CopyFileEx

  Alt 8. Apr 2006, 17:53
Die Formel von Luckie ist allerdings nicht richtig, er addiert einfach beide Teile. Der richtige Wert errechnet sich so:

bytes := (Int64(Msg.LParam) shl 32) + Msg.WParam; bytes ist natürlich als Int64 zu deklarieren.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: CopyFileEx

  Alt 8. Apr 2006, 17:56
Dann mußt du halt noch einen Divisor mit einbauen, welche die Werte vor der Übergabe an die ProgressBar anpaßt diesen kannst du ja setzen, sobald du die Dateigröße bekommst, also in CEXM_MAXBYTES.

Etwa so:
Delphi-Quellcode:
CEXM_MAXBYTES:
  begin
    if Int64(Msg.WParam) shl 32 + Msg.LParam <= $7FFFFFFF then Divisor := 1
    else Divisor := (Int64(Msg.WParam) shl 32 + Msg.LParam) div $7FFFFFFF;
    ProgressBar1.Max := Msg.WParam + Msg.LParam;
(Int64(Msg.WParam) shl 32 + Msg.LParam) div Divisor
PS: Lackie, muß in WndProc nicht
Msg.WParam + Msg.LParam so sein?
Int64(Msg.WParam) shl 32 + Msg.LParam Mist zu langsam -.-''
$2B or not $2B
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: CopyFileEx

  Alt 8. Apr 2006, 18:09
Zitat von himitsu:
Mist zu langsam -.-''
...und auch nicht ganz korrekt! Der höherwertige Anteil steht in Msg.LParam.
  Mit Zitat antworten Zitat
masadafish

Registriert seit: 21. Apr 2005
8 Beiträge
 
#15

Re: CopyFileEx

  Alt 11. Apr 2006, 15:39
danke nochmal für die antworten ... ich habs jetz einfach in prozent umgerechnet
jetz hab ich dadurch eine ordenliche progressbar
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: CopyFileEx

  Alt 11. Apr 2006, 16:27
Zitat von Hawkeye219:
...und auch nicht ganz korrekt! Der höherwertige Anteil steht in Msg.LParam.
Mist, hast Recht ... hier gibt's nicht zufällig 'nen Mod, der bei mir aus den ganzen WParam ein LParam und umgekehrt macht
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: CopyFileEx

  Alt 11. Apr 2006, 16:28
Tipps noch mal richtig, dann kopiere ich das in meinen Code-Schnippsel rein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: CopyFileEx

  Alt 17. Apr 2006, 12:29
Das Problem ist: Die Progressbar kommt nur mit Integer klar und nicht mit Int64. Will man eine Progressbar benutzen muss man sowieso in Prozent umrechnen. Ich habe den Code auf meiner Homepage korrigiert: http://www.michael-puff.de/Developer...opyFileEx.html
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: CopyFileEx

  Alt 10. Mär 2007, 20:07
Zitat von Luckie:
Tipps noch mal richtig, dann kopiere ich das in meinen Code-Schnippsel rein.

Nein, in Prozent muß es nicht sein ... der Wert muß halt "nur" in den Integer-Bereich gebracht (verkleinert) werden,
aber Prozent geht och ... is ja auch im entsprechendem Bereich.


Zitat:
Dann mußt du halt noch einen Divisor mit einbauen, welche die Werte vor der Übergabe an die ProgressBar anpaßt diesen kannst du ja setzen, sobald du die Dateigröße bekommst, also in CEXM_MAXBYTES.

Etwa so:
Delphi-Quellcode:
CEXM_MAXBYTES:
  begin
    if Int64(Msg.LParam) shl 32 + Msg.WParam <= $7FFFFFFF then Divisor := 1
    else Divisor := (Int64(Msg.LParam) shl 32 + Msg.WParam) div $7FFFFFFF;
    ProgressBar1.Max := (Int64(Msg.LParam) shl 32 + Msg.WParam) div Divisor;
(Int64(Msg.LParam) shl 32 + Msg.WParam) div Divisor;
PS: Luckie, muß in WndProc nicht
Msg.WParam + Msg.LParam so sein?
Int64(Msg.WParam) shl 32 + Msg.LParam Mist zu langsam -.-''


[edit] LParam <> WParam
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 03:15 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