Autor Beitrag
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: So 06.03.11 17:39 
In www.delphi-forum.de/...en+lassen_59027.html wurde ein schöner SourceCode erwähnt, der auch sofort bei mir funktioniert hat.
Nur das speichern des Bildes funktioniert nicht.
Es wird die Procedure Bildmachen aufgerufen und darin CapGrabSingleFrame.
Das ruft dann auch die Funktion capFileSaveDIB(ghCapWnd, LongInt(@achSingleFileName)) auf.
Die Übergabe Parameter sind meiner Ansicht nach korrekt und es wird eine 1 als Rückgabecode zurückgegeben.
Es wird jedoch keine Datei in dem übergebenen Verzeichnis angelegt.

Diese Function sollte doch wohl zum speichern gedacht sein ?

Mein Betriessystem ist Win7 x64, kann das ein Problem sein ?

Für Hilfen wäre ich dankbar.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 06.03.11 19:14 
Das liest sich als ob du in dem Verzeichnis keine Schreibrechte hast und die Datei schlicht im VirtualStore gespeichert wird. Um da hinzukommen, kannst du im Windows Explorer als Verzeichnis eingeben:
ausblenden Quelltext
1:
%APPDATA%\..\Local\VirtualStore					
SmileySN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: So 06.03.11 19:39 
ich habe es schon mit zwei festen werten probiert C:\Temp\Mein_Bild.bmp und Z:\Temp\Mein_Bild.bmp Z ist meine zweite Platte.
In diesen Verzeichnissen kann ich schreiben und löschen.
SmileySN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: So 06.03.11 19:46 
Ich hab was entdeckt, er speichert die Datei, jedoch unter dem Namen Z.
Oder wenn ich auf Platte C speichere unter dem Namen C im Programmverzeichnis.
SmileySN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: So 06.03.11 19:57 
Es muss etwas mit dem Array of Char zu tun haben, das mein D2010 anders auswertet als D7.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Procedure CapGrabSingleFrame;
  Var
    achSingleFileName: Array [0 .. 255Of Char;
  Begin
    If ghCapWnd = 0 Then
      exit;

    capGrabFrame(ghCapWnd);
    StrPCopy(achSingleFileName, gCapSingleImageFileName);
    capFileSaveAS(ghCapWnd, LongInt(@achSingleFileName));
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 06.03.11 20:08 
Dann werden da offenbar AnsiChars erwartet. Denn dann ist das zweite Zeichen bei deinem Code das Nullzeichen und damit das Ende des Strings. Brauchst du eigentlich wirklich den Cast? Welchen Typ hat denn bei dir der zweite Parameter (in der Deklaration von capFileSaveAS)?

Jedenfalls musst du statt Char einfach AnsiChar nehmen vermute ich. ;-)
SmileySN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: So 06.03.11 20:24 
Ich habe mich selbst reingelegt, die Idee mit AnsiChar war schon richtig wie ich vermutete habe, nur habe ich gleichzeitig vorher versucht von capFileSaveDIB auf capFileSaveAs umzustellen und habe das nicht wieder zurückgestellt.
Mit capFileSaveDIB und AnsiChar für das Array funktioniert es.
Das Array war mit Array... of Char 512 groß mit Array... of AnsiChar ist es nur 256 groß wie es sein soll. Also die Unicodeproblematik.


Die Variable ist in capFileSaveDIB als Longint deklariert.

Danke Jaenicke für die Hilfe.