Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CopyFileEx (https://www.delphipraxis.net/27298-copyfileex.html)

Dani 8. Apr 2006 16:39

Re: CopyFileEx
 
Zitat:

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.
Delphi-Quellcode:
// wParam: lopart, lParam: hipart

Hawkeye219 8. Apr 2006 16:53

Re: CopyFileEx
 
Die Formel von Luckie ist allerdings nicht richtig, er addiert einfach beide Teile. Der richtige Wert errechnet sich so:

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

Gruß Hawkeye

himitsu 8. Apr 2006 16:56

Re: CopyFileEx
 
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;
Delphi-Quellcode:
(Int64(Msg.WParam) shl 32 + Msg.LParam) div Divisor

PS: Lackie, muß in WndProc nicht
Delphi-Quellcode:
Msg.WParam + Msg.LParam
so sein?
Delphi-Quellcode:
Int64(Msg.WParam) shl 32 + Msg.LParam
Mist zu langsam -.-''

Hawkeye219 8. Apr 2006 17:09

Re: CopyFileEx
 
Zitat:

Zitat von himitsu
Mist zu langsam -.-''

...und auch nicht ganz korrekt! Der höherwertige Anteil steht in Msg.LParam. :zwinker:

masadafish 11. Apr 2006 14:39

Re: CopyFileEx
 
danke nochmal für die antworten ... ich habs jetz einfach in prozent umgerechnet
jetz hab ich dadurch eine ordenliche progressbar

himitsu 11. Apr 2006 15:27

Re: CopyFileEx
 
Zitat:

Zitat von Hawkeye219
...und auch nicht ganz korrekt! Der höherwertige Anteil steht in Msg.LParam. :zwinker:

Mist, hast Recht ... hier gibt's nicht zufällig 'nen Mod, der bei mir aus den ganzen WParam ein LParam und umgekehrt macht :?:

Luckie 11. Apr 2006 15:28

Re: CopyFileEx
 
Tipps noch mal richtig, dann kopiere ich das in meinen Code-Schnippsel rein. ;)

Luckie 17. Apr 2006 11:29

Re: CopyFileEx
 
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

himitsu 10. Mär 2007 19:07

Re: CopyFileEx
 
Zitat:

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;
Delphi-Quellcode:
(Int64(Msg.LParam) shl 32 + Msg.WParam) div Divisor;

PS: Luckie, muß in WndProc nicht
Delphi-Quellcode:
Msg.WParam + Msg.LParam
so sein?
Delphi-Quellcode:
Int64(Msg.WParam) shl 32 + Msg.LParam
Mist zu langsam -.-''


[edit] LParam <> WParam


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
Seite 2 von 2     12   

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