Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi bild speichern unter (https://www.delphipraxis.net/59158-bild-speichern-unter.html)

f4r 18. Dez 2005 14:25


bild speichern unter
 
:-D hi leute
hab schon gesucht aber mich gewundert warum das net gefunden hab :gruebel:

also hier die frage

möchte über ein label ein bild das scho geladem wurden ist speichern, dabei soll der user sich den pfad mittels eines normales windows dialoges aussuchen können
der dialog soll von vorne herein aber auf desktop stehen wie geht das ?

das was ich bisjetzt hab :

Delphi-Quellcode:
procedure TPicshowForm.Label7Click(Sender: TObject);
begin
SaveDialog1.FileName:=''+Label3.caption+'';
With SaveDialog1 do
          if execute then
             begin
             TextPfad:=FileName;
             AssignFile(TextDatei,TextPfad);
             Rewrite(Textdatei);
             CloseFile(TextDatei);
             end;
end;
hilft mir jemand bitte :(

gruss

dahead 18. Dez 2005 14:31

Re: bild speichern unter
 
das stichwort, nach dem du suchen solltest, lautet GetShellFolder.

Damit erfährst du den Pfad des Desktops (CSIDL) und übergibst ihn via SD.InitialDir := xxx an den SaveDialog.

Frage: Warum speicherst du dein Bild nicht einfach via Image1.Picture.SaveToFile(...)?

Edit: Link hinzugefügt.

f4r 18. Dez 2005 14:33

Re: bild speichern unter
 
der user soll ja bestimmen wo die datei hin sollen
was anfangs vorgegeben ist
welche datei gespeichert werden soll
und das der dialog von anfang auf desktop stehen soll

gruss

dahead 18. Dez 2005 14:37

Re: bild speichern unter
 
Zitat:

Zitat von f4r
der user soll ja bestimmen wo die datei hin sollen
was anfangs vorgegeben ist
welche datei gespeichert werden soll
und das der dialog von anfang auf desktop stehen soll

gruss

siehe meinen link oben (das edit).

was ich mit der frage meinte war deine AssignFile, Rewrite usw. Konstruktion. Ich wage zu bezweifeln, dass die funktioniert (von welchem typ ist denn Textdatei?).

edit: ein "n" für "den" ergänzt.

f4r 18. Dez 2005 15:02

Re: bild speichern unter
 
typ text

f4r 18. Dez 2005 15:05

Re: bild speichern unter
 
versteh kein wort von dem link das wer daher erstmal wo wenn ichs normal hinkrich :D

dahead 18. Dez 2005 15:07

Re: bild speichern unter
 
Zitat:

Zitat von f4r
versteh kein wort von dem link das wer daher erstmal wo wenn ichs normal hinkrich :D

du fügst folgende units zu deinem programm:
Delphi-Quellcode:
uses
  { ... },
  ActiveX, // IMalloc
  ShellAPI, // SHGetSpecialFolderLocation() und SHGetPathFromIDList()
  ShlObj;  // CSIDL_-Konstanten
dann bindest du diese funktion ein:

Delphi-Quellcode:
function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
  pMalloc: IMalloc;
  pidl: PItemIDList;
  Path: PChar;
begin
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;

  // retrieve path
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  // free memory allocated by SHGetSpecialFolderLocation
  pMalloc.Free(pidl);
end;
und rufst sie so auf:

Delphi-Quellcode:
SD.InitialDir := GetSpecialFolder(Application.Handle, CSIDL_DESKTOPDIRECTORY);
...
edit: das "Application.Handle, " vergessen.

Ratte 18. Dez 2005 15:11

Re: bild speichern unter
 
Mist, wollte ich auch gerade erklären.
@f4r:Was soll eingentlich das ''+ und +'' beim Dateinamen? Das ist doch wohl überflüssig, wenn nicht sogar eine Fehlerquelle.

dahead 18. Dez 2005 15:13

Re: bild speichern unter
 
Zitat:

Zitat von Ratte
Mist, wollte ich auch gerade erklären.
@f4r:Was soll eingentlich das ''+ und +'' beim Dateinamen? Das ist doch wohl überflüssig, wenn nicht sogar eine Fehlerquelle.

sollte egtl. nichts ausmachen, ist aber wirklich unnötig.

du solltest deinen dateinamen in einer variablen ablegen und nicht via label.caption darauf zugreifen. das ist amateurhaft bringt fehler mit sich (wenn du bspw. mal vergisst das label zu aktualisieren (also dessen caption)).

f4r 18. Dez 2005 15:36

Re: bild speichern unter
 
das hab ich gemacht weil das label sowieso schon da war und die vollständige quelle beinhalet da es ja ne cd w ird

gruss
f4r


p.s. ich bin noch weniger als ein amateur :D also nehme ich das mal als kompliment :D

edit
habs mal ohne die plusse versucht ! net möglich !

dahead 18. Dez 2005 15:45

Re: bild speichern unter
 
Zitat:

Zitat von f4r
das hab ich gemacht weil das label sowieso schon da war und die vollständige quelle beinhalet da es ja ne cd w ird

gruss
f4r


p.s. ich bin noch weniger als ein amateur :D also nehme ich das mal als kompliment :D

das mit dem "amateurhaft" war nicht böse gemeint. nur wirst du später merken, dass es auf dauer zu nichts führt. nehmen wir mal an, du willst den dateinamen in einer ini-datei speichern. dann übergibst du dort INI.WriteString('Header', 'Path', Label3.Caption). Dann hast du nicht nur ein label, sondern mal 20 oder noch mehr.

irgendwann verlierst du dann den überblick was jetzt egtl. label3 war. oder aber du verschreibst dich aus versehen und speicherst label4 ab. dann klappt was nicht, und den fehler findest du höchstwahrscheinlich auch nicht so schnell.

daher solltest du deine labels (und alle anderen komponenten) sinnvoll benennen (z.B. LBLFilename o.ä.). wenn du in einigen monaten das projekt nochmal überarbeiten wilslt, hast du dann viel weniger arbeit und einarbeitungszeit. ist nur ein tipp.

edit: hat es jetzt egtl. geklappt?

f4r 18. Dez 2005 15:50

Re: bild speichern unter
 
wolt grad posten :D

ja die dialogbox geht auf so wie es soll auch mit desktop und aber ich krich nix gespeichert

wie mach ich dem jetzt klar das er das bild C:\beispielordner\beispiel.jpg mit dem namen
'Bild beipsiel.jpg) speichern soll nach auswahl vom user des ziefverzeichnisses ?

dahead 18. Dez 2005 15:54

Re: bild speichern unter
 
so würde ich das bei einem image machen:

Delphi-Quellcode:
var
  SD: TSaveDialog;
begin
  SD := TSaveDialog.Create(Self);
  with SD do
   begin
    Filter := 'Jpeg Files (*.jpg)|*.jpg';
    Title := 'Save Image to...';
    InitialDir := GetSpecialFolder(Application.Handle, CSIDL_DESKTOPDIRECTORY);
    if Execute then
     begin
      Image1.Picture.SaveToFile(Filename);
     end;
   end;
  SD.Free;
end;
oder automatisch:

Delphi-Quellcode:
  Image1.Picture.SaveToFile(IncludeTrailingPathDelimiter(GetSpecialFolder(Application.Handle, CSIDL_DESKTOPDIRECTORY)) + 'beispiel.jpg');
oder so:

Delphi-Quellcode:
var
  SD: TSaveDialog;
begin
  SD := TSaveDialog.Create(Self);
  with SD do
   begin
    Filter := 'Jpeg Files (*.jpg)|*.jpg';
    Title := 'Save Image to...';
    InitialDir := GetSpecialFolder(Application.Handle, CSIDL_DESKTOPDIRECTORY); // Initalisierungs Verzeichnis ist Desktop
    if Execute then
     begin
      Image1.Picture.SaveToFile(IncludeTrailingPathDelimiter(ExtractFileDir(Filename)) + 'beispiel.jpg'); // speichert im vom User ausgewählten Verzeichnis ab.
     end;
   end;
  SD.Free;
end;
Das IncludeTrailingPathDelimiter ergänzt das Verzeichnis um einen abschließenden Backslash.

Edit: also wäre die dritte lösung für dich am geeignetsten.

aber wenn du den benutzer nur zur auswahl eines verzeichnisses (und nicht zur nennung eines dateinamens) ermächtigen willst, solltest du dir mal den Befehl "SelectDirectory" ansehen. Da gibt es fertige Komponenten wie die Jedis (Name weiß ich gerade nicht, irgendwas mit BrowseFolder oder so) oder die standalone Komponente TBrowseForFolder (http://endimus.com).

f4r 18. Dez 2005 16:06

Re: bild speichern unter
 
Liste der Anhänge anzeigen (Anzahl: 1)
klappen tuts trotzdem krich ich n fehlerrueckmeldung (angehängt)

was ichgern noch haette ist ein bestätigung das gespeichert wurde :D wenn das geht !

gruss
f4r

dahead 18. Dez 2005 16:22

Re: bild speichern unter
 
welche variante benutzt du?

lass dir mal vor dem savetofile den dateinamen (also den kompletten, den du auch an savetofile übergibst) in einer showmessage anzeigen.

evtl. ist der backslash doppelt oder so.

edit: zur überprüfung ob gespeichert wurde kannst du den dateinamen auf vorhandensein nach dem savetofile mit fileexists prüfen (gibt true zurück, wenn datei existiert) und du solltest natürlich darauf achten, dass vorher keine exceptions aufgetreten sind.

f4r 18. Dez 2005 16:24

Re: bild speichern unter
 
Liste der Anhänge anzeigen (Anzahl: 1)
noch zwei fragen
1. wie kann ich bestimmen was in dem edit feld von savedialog drinsteht wo man den namen normalerweise einträgt ?
2. wie kann ich den string dieses edit feldes "rausholen"

im anhang nochmal was gemeint

ziel

beim öffnen des dialoges soll bild + InttoStr(x) drinnstehen
das soll der user ggf. verändern und dann abgespeichert werden

also

irgendwie hier muesste es dann doch verädenrt werden:

Image1.Picture.SaveToFile(IncludeTrailingPathDelim iter(ExtractFileDir(Filename)) + 'beispiel.jpg'); // speichert im vom User ausgewählten Verzeichnis ab.

f4r 18. Dez 2005 16:26

Re: bild speichern unter
 
Zitat:

Zitat von dahead
welche variante benutzt du?

edit: du überprüfung ob gespeichert wurde kannst du den dateinamen mit fileexists prüfen (gibt true zurück, wenn datei existiert) und du solltest natürlich darauf achten, dass vorher keine exceptions aufgetreten sind.

1. die dritte
2. wie genau geht das mit fileexists was sind exceptions (engl ? ausnahmen ?) macht aber keien sinn ?

gruss

Ratte 18. Dez 2005 16:32

Re: bild speichern unter
 
Delphi-Quellcode:
var
  SD: TSaveDialog;
begin
  SD := TSaveDialog.Create(Self);
  with SD do
   begin
    Filename := 'Bild' + inttosr(x); // <-- eingefügt
    Filter := 'Jpeg Files (*.jpg)|*.jpg';
    Title := 'Save Image to...';
    InitialDir := GetSpecialFolder(Application.Handle, CSIDL_DESKTOPDIRECTORY); // Initalisierungs Verzeichnis ist Desktop
    if Execute then
     begin
      Image1.Picture.SaveToFile(Filename); // <-- geändert
     end;
   end;
  SD.Free;
end;
Müsste das gewünschte sein.
mfg,

Ratte

dahead 18. Dez 2005 16:39

Re: bild speichern unter
 
zu deinem ersten post:

du kannst nach dem Execute des SaveDialogs folgendes ergänzen:

Delphi-Quellcode:
if Execute then
  begin
   ...
   EdtFilename.Text := Filename;
   ...
  end;
was meinst du mit "rausholen"? löschen oder verwenden?
löschen geht mit EdtFilename.Text := '';

zum anderen post:

sehe gerade, ratte hat was gepostet.

f4r 18. Dez 2005 16:42

Re: bild speichern unter
 
es funktioniert alles sowieichs will ich krich aber immer noch die fehlermeldung
kansnt du mir außerdem nochmal das mit dem fileexist erklären ?

gruss

dahead 18. Dez 2005 16:48

Re: bild speichern unter
 
wie gesagt, dann sag mal was in der fehlermeldung steht. lass dir den dateinamen anzeigen und poste mir diese meldung (dialoge einfach via Strg-C kopieren und hier im forum mit Strg-V einfügen).

In der Hilfe von Delphi gibt es Infos zu FileExists.

Beispiel:

Delphi-Quellcode:
 case FileExists(Dateiname) of
  True: SHowMessage('Speichern OK!');
  False: ShowMessage('Fehler beim Speichern der Datei: ' + Dateiname);
 end;

f4r 18. Dez 2005 16:54

Re: bild speichern unter
 
fehlermeldung hab ich doch scho oben gepostet

Ratte 18. Dez 2005 16:59

Re: bild speichern unter
 
Wann tritt der Fehler denn genau auf? Geh das Programm mal im Einzelschrittmodus (F8) durch und schau wann der Fehler kommt. Der Teil hier sieht nämlich OK aus.

Ratte

dahead 18. Dez 2005 17:02

Re: bild speichern unter
 
Zitat:

Zitat von f4r
fehlermeldung hab ich doch scho oben gepostet

ja, aber die sagt ja nur aus, dass dateiname oder verzeichnis falsch sind, bzw. nicht existieren. daher sollst du ja auch den dateinamen der an savetofile übergeben wird VOR dem speichern mal anzeigen.

dann kuckst du ob da alles ok ist, bzw. postest ihn hier. wie gesagt, evtl. hast du zwei backslashs drin.

f4r 18. Dez 2005 17:05

Re: bild speichern unter
 
Liste der Anhänge anzeigen (Anzahl: 2)
der fehler tritt auf wenn ich zum beispiel programm zurück gehen mäöchte !
oder das naechste bild laden mööchten dann sieht die fehlermeldung allerdings ein bisschen anders aus was sehr interessant ist und drauf schließt lässt das irgendwas mit desktop funktion net ganz i.o. ist .
hier mal die meldung vor dme laden der neuen datei !

das programm denkt wohl irgendwie das es jetzt in einem anderen verzeichnis ist

gruss
edit

normalerweise muesste ersich im pfad d:\abibuch\.... befinden

Ratte 18. Dez 2005 17:09

Re: bild speichern unter
 
Wie lädts du das nächste Bild? Zeig mal den QT, wo der Fehler kommt.

Ratte

f4r 18. Dez 2005 17:11

Re: bild speichern unter
 
Delphi-Quellcode:
unit FPic;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,jpeg, MPlayer,ActiveX,ShellAPI,ShlObj ;

type
  TPicshowForm = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Timer1: TTimer;
    Label4: TLabel;
    Label5: TLabel;
    Label7: TLabel;
    SlideshowTimer: TTimer;
    Label6: TLabel;
    Label8: TLabel;
    Mediatimer: TTimer;
    MediaPlayer1: TMediaPlayer;
    SaveDialog1: TSaveDialog;
    procedure FormShow(Sender: TObject);
    procedure Label2Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label1MouseLeave(Sender: TObject);
    procedure Label2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label2MouseLeave(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Label5MouseLeave(Sender: TObject);
    procedure Label5MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label5Click(Sender: TObject);
    procedure SlideshowTimerTimer(Sender: TObject);
    procedure Label8Click(Sender: TObject);
    procedure Label6Click(Sender: TObject);
    procedure Label6MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label8MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label8MouseLeave(Sender: TObject);
    procedure Label6MouseLeave(Sender: TObject);
    procedure MediatimerTimer(Sender: TObject);
    procedure Label7Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  PicshowForm: TPicshowForm;
var x,pic,max:integer;
var
  TextPfad:string;
  TextDatei:text;
implementation

uses FSsAbfrage, Fautorun, FStart;

{$R *.dfm}


 function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
  pMalloc: IMalloc;
  pidl: PItemIDList;
  Path: PChar;
begin
  // get IMalloc interface pointer
  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;

  // retrieve path
  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  // free memory allocated by SHGetSpecialFolderLocation
  pMalloc.Free(pidl);
end;



procedure TPicshowForm.FormShow(Sender: TObject);
begin
ShowWindow(handle,SW_MAXIMIZE);
x:=strTOInt(Edit1.text);
pic:=1;


case x of

0: begin
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/allg/'+Inttostr(pic) +'.jpg');
   max:=41;
   end;

1: begin
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/sehens/'+Inttostr(pic) +'.jpg');
   max:=36;
   end;
2: begin
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/cont/'+Inttostr(pic) +'.jpg');
   max:=4;
   end;

end;

if image1.picture.Width>image1.Picture.Height
then
begin
panel1.Width:=802;
panel1.Height:=602;
panel1.Left:=111;
end
else
begin
panel1.Width:=452;
panel1.Height:=602;
panel1.Left:=286;
end;

end;

procedure TPicshowForm.Label2Click(Sender: TObject);
begin

case x of
0: begin
   if pic=41 then pic:=1
   else pic:=pic+1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/allg/'+Inttostr(pic) +'.jpg');
   end;
1: begin
   if pic=36 then pic:=1
   else pic:=pic+1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/sehens/'+Inttostr(pic) +'.jpg');
   end;
2: begin
   if pic=4 then pic:=1
   else pic:=pic+1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/cont/'+Inttostr(pic) +'.jpg');
   end;
end;
if image1.picture.Width>image1.Picture.Height
then
begin
panel1.Width:=802;
panel1.Height:=602;
panel1.Left:=111;
end
else
begin
panel1.Width:=452;
panel1.Height:=602;
panel1.Left:=286;
end;

end;

procedure TPicshowForm.Label1Click(Sender: TObject);
begin
case x of
0: begin
   if pic=1 then pic:=41
   else pic:=pic-1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/allg/'+Inttostr(pic) +'.jpg');
   end;
1: begin
   if pic=1 then pic:=36
   else pic:=pic-1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/sehens/'+Inttostr(pic) +'.jpg');
   end;
2: begin
   if pic=1 then pic:=4
   else pic:=pic-1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/cont/'+Inttostr(pic) +'.jpg');
   end;
end;
if image1.picture.Width>image1.Picture.Height
then
begin
panel1.Width:=802;
panel1.Height:=602;
panel1.Left:=111;
end
else
begin
panel1.Width:=452;
panel1.Height:=602;
panel1.Left:=286;
end;
end;

procedure TPicshowForm.Label1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
Label1.cursor:=crhandpoint;
Label1.Font.Color:=clred;
end;

procedure TPicshowForm.Label1MouseLeave(Sender: TObject);
begin
Label1.Font.Color:=clsilver;
Label1.cursor:=crdefault;
end;

procedure TPicshowForm.Label2MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
Label2.cursor:=crhandpoint;
Label2.Font.Color:=clred;
end;

procedure TPicshowForm.Label2MouseLeave(Sender: TObject);
begin
Label2.Font.Color:=clsilver;
Label2.cursor:=crdefault;
end;

procedure TPicshowForm.Timer1Timer(Sender: TObject);
var
  NewFileName: string;
begin

Label4.caption:='Bild '+ inttostr(pic) +' / '+ inttostr(max) +'';

NewFileName:= ExtractFilePath(Application.ExeName);

case x of
0:
begin
Label3.Caption:='Quelle: '+ NewFileName +'pics\kursfahrt\frankreich\allg\'+Inttostr(pic) +'.jpg';
end;
1:
begin
Label3.Caption:='Quelle: '+ NewFileName +'pics\kursfahrt\frankreich\sehens\'+Inttostr(pic) +'.jpg';
end;
2:
begin
Label3.Caption:='Quelle: '+ NewFileName +'pics\kursfahrt\frankreich\cont\'+Inttostr(pic) +'.jpg';
end;
end;


end;

procedure TPicshowForm.Label5MouseLeave(Sender: TObject);
begin
Label5.Font.Color:=clsilver;
Label5.cursor:=crdefault;
end;

procedure TPicshowForm.Label5MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
Label5.cursor:=crhandpoint;
Label5.Font.Color:=clred;
end;

procedure TPicshowForm.Label5Click(Sender: TObject);
begin
if Label5.caption='Slideshow starten' then
begin
Label5.Caption:='Slideshow stoppen';
SsForm.show;
end
else
begin
slideshowtimer.Enabled:=false;
Label5.caption:='Slideshow starten';
end;
end;

procedure TPicshowForm.SlideshowTimerTimer(Sender: TObject);
begin
case x of
0: begin
   if pic=41 then pic:=0;
   pic:=pic+1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/allg/'+Inttostr(pic) +'.jpg');
   end;
1: begin
   if pic=36 then pic:=0;
   pic:=pic+1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/sehens/'+Inttostr(pic) +'.jpg');
   end;
2: begin
   if pic=4 then pic:=0;
   pic:=pic+1;
   Image1.Picture.LoadFromFile('./pics/kursfahrt/frankreich/cont/'+Inttostr(pic) +'.jpg');
   end;
end;
if image1.picture.Width>image1.Picture.Height
then
begin
panel1.Width:=802;
panel1.Height:=602;
panel1.Left:=111;
end
else
begin
panel1.Width:=452;
panel1.Height:=602;
panel1.Left:=286;
end;
end;




procedure TPicshowForm.Label8Click(Sender: TObject);
begin
SlideshowTimer.Enabled:=false;
mediaplayer1.filename:='./media/klick.wav';
mediaplayer1.open;
mediaplayer1.play;
MediaTimer.Enabled:=true;
Mainform.visible:=true;
PicshowForm.visible:=false;
end;

procedure TPicshowForm.Label6Click(Sender: TObject);
begin
mediaplayer1.filename:='./media/klick.wav';
mediaplayer1.open;
mediaplayer1.play;
StartForm.cltimer.enabled:=true;
end;

procedure TPicshowForm.Label6MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
Label6.Font.Color:=clblue;
Label6.cursor:=crhandpoint;
end;

procedure TPicshowForm.Label8MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
Label8.Font.Color:=clblue;
Label8.cursor:=crhandpoint;
end;

procedure TPicshowForm.Label8MouseLeave(Sender: TObject);
begin
Label8.Font.Color:=clsilver;
Label8.cursor:=crdefault;
end;

procedure TPicshowForm.Label6MouseLeave(Sender: TObject);
begin
Label6.Font.Color:=clsilver;
Label6.cursor:=crdefault;
end;

procedure TPicshowForm.MediatimerTimer(Sender: TObject);
begin
Mediaplayer1.close;
MediaTimer.Enabled:=false;
end;

procedure TPicshowForm.Label7Click(Sender: TObject);
var filename2:string;
var
  SD: TSaveDialog;
begin
  SD := TSaveDialog.Create(Self);
  with SD do
   begin
    Filename := 'Bild' + inttostr(pic);
    Filename2:=''+Filename+'.jpg';
    Filter := 'Jpeg Files (*.jpg)|*.jpg';
    Title := 'Bild speichern unter ';
    InitialDir := GetSpecialFolder(Application.Handle, CSIDL_DESKTOPDIRECTORY); // Initalisierungs Verzeichnis ist Desktop
    if Execute then
     begin
        Image1.Picture.SaveToFile(filename2);
     //        Image1.Picture.SaveToFile(IncludeTrailingPathDelimiter(ExtractFileDir(Filename)) + 'bild'+Inttostr(pic)+'.jpg'); // speichert im vom User ausgewählten Verzeichnis ab.
     end;
   end;
  SD.Free;
  case FileExists(Filename2) of
  True: SHowMessage('Datei wurde gespeichert');
  False: ShowMessage('Fehler beim Speichern der Datei: ' + filename2);
end;
end;



{with savedialog1 do
begin
savedialog1.InitialDir := GetSpecialFolder(Application.Handle, CSIDL_DESKTOPDIRECTORY);
savedialog1.filename:='Bild'+InttoStr(pic)+'';
savedialog1.execute;
end;}

end.

Ratte 18. Dez 2005 17:24

Re: bild speichern unter
 
Und wo kommt der Fehler? Ich blick da nicht ganz durch...
Ratte

f4r 18. Dez 2005 17:28

Re: bild speichern unter
 
in dem momentan wo ich auf ein label klicke
bsp
label2click ist der weiterbutton sozusagen es wird normalerweise das naechst bild geladen

alle bilder haben lediglich nummern von 1 ... 41 z.b.
so war es leichter fuer mich das zu proggen

ich weis es ist ein heilloses durcheinander :(

dahead 18. Dez 2005 17:38

Re: bild speichern unter
 
jetzt mal was grundsätzliches:

sind die bilder bereits vorhanden oder muss man auch welche speichern können. für mich sieht das nach einer art slideshow programm aus.

falls dem so wäre, könntest du via FindFiles (siehe Codelib) alle Jpeg-Dateien auflisten lassen, in einer TStringList speichern und dann einfach vor oder zurück navigieren.

f4r 18. Dez 2005 17:47

Re: bild speichern unter
 
ok nochmal es sind in drei verschiedenen ordner bilder vorhanden
in ordner a 41
in ordner b 36
in ordner c 4

beim on show ereignisses des forms wird über ein edit feld entschieden welche bilder ausgewähl wurden

dann in wird das erste geladen

es gibt ein weiter button ein zurück button und ein slideshowbutton
klickt man dieses kommt ssform und mach ne abfrage über n spinedit wielang das interval sein soll

nun wollt ich speichern option hinzufügen.

hab ich jetzt n bild erfolgreich abgespeichert und klicke ich auf eines der labels kommt die jweilige fehlermeldung

will ich einfach nur zurück (im programm) kommt die aller erste die gepostet

will ich n bild neu laden sprich durch klicke weiter zurück oder sslabel komtm die zweite fehlermeldung die doppelt attached habe !

so sag wenn du noch fragen hast

f4r 18. Dez 2005 18:08

Re: bild speichern unter
 
:wall: hilfe :( :( :( :( :(

dahead 18. Dez 2005 20:35

Re: bild speichern unter
 
pushen ist erst nach 24 stunden erlaubt.

ich war egtl. schon dabei dir eine längere antwort auf deinen geposteten sourcecode zu schreiben (mit tipps usw.), allerdings hat das wenig sinn, da ich mir gar nicht sicher bin, ob du das alles schon verstanden hättest. als ich dann sah, dass ratte einen kommentar gepostet hat, hab ich das abgebrochen.

da dein code dermaßen unübersichtlich ist, hatte ich auch keine große lust zu den ganzen zeilen einen kommentar loszuwerden, bzw. das zu korrigieren.

wir können allerdings folgendes machen: du stellst mal dein ganzes projekt online und ich kuck dann mal warum da ein fehler kommt, bzw. bei was.

falls du das nicht willst, kann ich dir nur empfehlen deinen code erstmal etwas aufzuräumen, sprich prozeduren und funktionen anzuwenden, deine labels sinnvoll zu benennen usw. dann dürfte sich relativ schnell der fehler (deinerseits) finden oder eingrenzen lassen.

alternativ dazu kannst du auch dein programm etwas umschreiben, so dass du alle dateien mit der endung .jpg|.jpeg in eine StringListe lädst (Stichwort: FindFiles, Filter) und dann bei bei vor oder zurück einfach den nächsten oder letzten eintrag in der stringliste (wo sich die dateinamen befinden) lädst.

f4r 18. Dez 2005 21:39

Re: bild speichern unter
 
gib man deine email addy dannschick ich dir den gesamten quellcode
mit der nötigen ordner strucktur

dahead 18. Dez 2005 21:42

Re: bild speichern unter
 
poste das projekt ohne die bilder einfach hier.
lass die exe weg, und pack alles in ein zip oder 7z archiv.

dann ist das kein problem.

edit: außerdem kannst du mir das auch via pm schicken.

f4r 18. Dez 2005 21:46

Re: bild speichern unter
 
versteht mich wirklich net falsch aber da sind namen und alles so drinne das kann ich net einfach so posten !

hab das jetzt so gemacht die ordnerstruktur mit 3 musterbildern sind 4 kb gross oder so

damit mach das ganze projekt rund 5 mb gebt mir mal eure emails

dahead 18. Dez 2005 21:51

Re: bild speichern unter
 
wie gesagt, du kannst mir eine pm (da gibt es unten ein button) mit der datei als anhang schicken.

dazu brauchst du nicht meine mail adr.

--

warum stehen da überall namen drin? warum ist das teil 5 mb groß ohne bilder?

f4r 18. Dez 2005 22:02

Re: bild speichern unter
 
er nimmt irgendwie meine date net an

ich geh jetzt auch schlafen gucken morge is auch tag

danke auf jeden fall schon mal alle !!!!!!!!!!!!!!!!!!1111

gruss

f4r 27. Dez 2005 19:11

Re: bild speichern unter
 
SO hab jetzt nochmal ne frage:

hier erstmal der quellcode

Code:
procedure TPicshowForm.Label7Click(Sender: TObject);
var filename2:string;
begin
   with SaveDialog1 do
   begin
    Filename := 'Bild' + inttostr(pic);
    Filename2:=''+Filename+'.jpg';
    Filter := 'Jpeg Files (*.jpg)|*.jpg';
    Title := 'Bild speichern unter ';
    if Execute then
     begin
        Image1.Picture.SaveToFile(filename2);
     end;
    end;

end;
so hab jetzt errstmal alles rausgenommen um zu das problem lokalisieren zu koennen
resultat war das es nicht an der funktion liegt !
Die Fehlermeldungen (siehe anhang) kommen nachdem man egspeichert hat.

ich kanns mir logisch natuerlich nicht erklären,aber der zweiten meldung nach zu folgen ( die kommt wenn man das naechste bild oeffnen will) befindet sich das projekt oder die exe nicht mehr im gleichen verzeichnis

habt ihr da ne idee was das noch sein koennte ???

gruss
f4r

fränk0815 27. Dez 2005 19:28

Re: bild speichern unter
 
Delphi-Quellcode:
procedure TPicshowForm.Label7Click(Sender: TObject);
var filename2:string;
begin
   with SaveDialog1 do
   begin
    Filename := 'Bild' + inttostr(pic);
    Filename2:=''+Filename+'.jpg'; //Hier sind doch keine einleitenden '' nötig, oder ?
    Filter := 'Jpeg Files (*.jpg)|*.jpg';
    Title := 'Bild speichern unter ';
    if Execute then
     begin
        Image1.Picture.SaveToFile(filename2);
     end;
    end;

end;
... siehe eingefügter Kommentar. Ausserdem ist Filename2 nicht nötig. Kann man auch so schreiben:

Delphi-Quellcode:
Filename := 'Bild' + IntToStr(pic) + '.jpg';


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Seite 1 von 2  1 2      

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