![]() |
pfadangabe wie bei html
hallo hallo,
ich habe ein kleines datenbankprogramm geschrieben. in dem programm werden auch bilder gespeichert (JPEG´s). es wird in der tabelle allerdings nur de Pfad diese jpeg´s gespeichert. z.B. c:\bilder\bild.jpg diese pfad wird dann in einem TImage angezeigt. jetzt mein problem: wenn ich am ende des jahres alle daten brenne und später auf der cd aus angucken möchte findet das programm - selbst wenn die bilder mitgebrannt werden - den pfad ja nicht mehr. kamm man das irgendwie so programmieren wie z.B. bei html der quelltext sähe dann etwa so aus ..\bilder\bild.jpg also, egal wo (festplatte oder cd rom) der ordner liegt, das programm findet die bilder. die ordner müssen natürlich gleich bleiben, mir geht es nur um die laufwerksangabe. ich hoffe ich hab mich verständlich ausgedrückt und jemand kann mir helfen :D vielen dank vamp79 |
Hi, ich weiß jetzt nicht wie das bei dieser Datenbank ist, aber normalerweise sollten relative Pfadangaben funktionieren, wenn du in Delphi zb ein Bild lädst kannst du ja auch 'bild.bmp' oder '../images/xxx.bmp' angeben.
Gruß, Sebastian |
das werde ich dann mal ausprobieren, danke.
hab jetzt allerdings ein anderes problem: mein prog läuft so: durch einen OpenPictureDialog wähle ich ein bild aus... der pfad des bildes wird dann in der datenbank abgelegt. der pfad könnte: c:\bilder\bild1.jpg oder d:\fotos\fotos\foto1.jpg heißen, das ist dem Programm egal jetzt wäre es nur besser wenn der OpenPictureDialog erst das bild in einen ordner (g:\bilder\) kopiert und dann diesen neuen pfad in der datenbank speichert. also: g:\bilder\bild1.jpg oder g:\bilder\foto1.jpg sonst funktioniert das mit der relativen pfadangabe ja nicht kennst du den quelltext womit ich über den OpenPictureDialog bilder in einen ordner kopiere?? vielen dank vamp79 |
Hi vamp79,
Du kannst den Benutzer ein Laufwerk, oder Root-Verzeichnis wählen lassen (mit API Funktion SHBrowseForFolder oder mit fertiger Komponente, z.B. ![]() gruß, harrybo |
danke muß ich mal probieren, hört sich aber noch en bisschen kompliziert an (bin anfänger in delphi).
Kann man den OpenPictureDialog, oder besser dem button der den OpenPictureDialog öffnet nicht einfach sagen, das er erst das ausgewählte bild automatisch in einen fest dafür vorgesehenen Ordner kopiert (z.B. d:\bilder) und danach den neuen pfad in der datenbank speichert (z.B. d:\bilder\bild1.jpg)? vielen dank vamp79 |
Moin Vamp,
dazu mal kurz ein Kommentar zu den Dialogen TOpenDialog TSaveDialog und deren Picture Varianten. Mit diesen Dialogen wird weder eine Datei geöffnet (Open), noch gespeichert (Save), sondern nur ein bequemer Weg geliefert den Pfad zu einer, oder mehreren (Option ofAllowMultiSelect = true) Dateien zu erhalten. Was Du dann mit dem Ergebnis anfängst ist Dein Problem. Beispiel: Mittels TOpenPictureDialog wird der Pfad zu einem JPG ausgewählt. Da Du die Bilder ein einem bestimmten Verzeichnis brauchst, kopierst Du es jetzt in dieses Verzeichnis (unter gleichem oder anderem Namen, Namen extrahieren mit ExtractFileName), und speicherst diesen Pfad in der Datenbank. Damit die Datenstruktur erhalten bleibt, bzw. noch nachzuvollziehen ist woher das Bild ursprünglich stammt, wäre es vielleicht sogar sinnvoll nur den : der Laufwerksangabe zu entfernen und dann den gesamten Pfad als relativen Pfad zu Deinem eigenen Speicherpfad zu betrachten, so dass ein Bild das aus c:\bilder stammt und den Namen foto1.jpg hat in SaveImages\c\bilder\foto1.jpg gespeichert wird. Achtung: Wenn Du auch Netzwerkfreigaben zur Auswahl zulässt, müsste natürlich nicht nur der : entfernt werden, sondern ggf. die \\ am Anfang des Rechernnamens. Um die Verzeichnisse problemlos anlegen zu können sei noch das Stichwort ForceDirectories genannt. |
Hai,
hier mal ein einfachs Beispiel:
Delphi-Quellcode:
Chris war mal wieder schneller :oops:
procedure TForm1.Button2Click(Sender: TObject);
var dateiname, quelle, ziel : String; begin ziel := 'c:\bilder\'; Forcedirectories (ziel); // UNIT FileCtrl If (OpenPictureDialog1.Execute) then //Ein Bild wurde ausgewählt begin quelle := OpenPictureDialog1.FileName; dateiname := ExtractFileName (quelle); //Unit Sysutils CopyFile(PChar(quelle), PChar(ziel + dateiname), false); //Vorhandende Dateien werden nicht überschrieben. end; end; |
@Sharky:
ich habs ausprobiert, funtioniert aber irgendwie nicht. @Christian Seehase: Hab ich nicht wirklich verstanden was du jetzt meinst, sorry vielleicht könnt ihr mir das anhand meines quelltextes beschreiben: ich hab die ganzen DBEdit´s, Label´s usw, mal weggelassen
Delphi-Quellcode:
var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin If OpenPictureDialog1.Execute then Begin Table1.Edit; Table1.FieldbyName('Bild1').AsString:=OpenPictureDialog1.Filename; Table1.Post; End; end; procedure TForm1.Image1Click(Sender: TObject); begin Image1.Picture.LoadFromFile('G:\Bilder\bla.jpg'); end; procedure TForm1.Table1AfterScroll(DataSet: TDataSet); begin image1.picture := nil; if not table1.FieldByName('Bild1').IsNull then if FileExists(table1.FieldByName('Bild1').AsString) then image1.Picture.LoadFromFile(table1.FieldByName('Bild1').AsString); image2.picture := nil; if not table1.FieldByName('Bild2').IsNull then if FileExists(table1.FieldByName('Bild2').AsString) then image2.Picture.LoadFromFile(table1.FieldByName('Bild2').AsString); image3.picture := nil; if not table1.FieldByName('Bild3').IsNull then if FileExists(table1.FieldByName('Bild3').AsString) then image3.Picture.LoadFromFile(table1.FieldByName('Bild3').AsString); image4.picture := nil; if not table1.FieldByName('Bild4').IsNull then if FileExists(table1.FieldByName('Bild4').AsString) then image4.Picture.LoadFromFile(table1.FieldByName('Bild4').AsString); image5.picture := nil; if not table1.FieldByName('Bild1').IsNull then if FileExists(table1.FieldByName('Bild1').AsString) then image5.Picture.LoadFromFile(table1.FieldByName('Bild1').AsString); image6.picture := nil; if not table1.FieldByName('Bild2').IsNull then if FileExists(table1.FieldByName('Bild2').AsString) then image6.Picture.LoadFromFile(table1.FieldByName('Bild2').AsString); image7.picture := nil; if not table1.FieldByName('Bild3').IsNull then if FileExists(table1.FieldByName('Bild3').AsString) then image7.Picture.LoadFromFile(table1.FieldByName('Bild3').AsString); image8.picture := nil; if not table1.FieldByName('Bild4').IsNull then if FileExists(table1.FieldByName('Bild4').AsString) then image8.Picture.LoadFromFile(table1.FieldByName('Bild4').AsString); end; procedure TForm1.Button3Click(Sender: TObject); begin If OpenPictureDialog2.Execute then Begin Table1.Edit; Table1.FieldbyName('Bild2').AsString:=OpenPictureDialog2.Filename; Table1.Post; End; end; procedure TForm1.Image2Click(Sender: TObject); begin Image2.Picture.LoadFromFile('G:\Bilder\bla.jpg'); end; procedure TForm1.Image3Click(Sender: TObject); begin Image3.Picture.LoadFromFile('G:\Bilder\bla.jpg'); end; procedure TForm1.Button4Click(Sender: TObject); begin If OpenPictureDialog3.Execute then Begin Table1.Edit; Table1.FieldbyName('Bild3').AsString:=OpenPictureDialog3.Filename; Table1.Post; End; end; procedure TForm1.Image4Click(Sender: TObject); begin Image4.Picture.LoadFromFile('G:\Bilder\bla.jpg'); end; procedure TForm1.Button5Click(Sender: TObject); begin If OpenPictureDialog4.Execute then Begin Table1.Edit; Table1.FieldbyName('Bild4').AsString:=OpenPictureDialog4.Filename; Table1.Post; End; end; procedure TForm1.Image5Click(Sender: TObject); begin Image5.Picture.LoadFromFile('G:\Bilder\bla.jpg'); end; procedure TForm1.Image6Click(Sender: TObject); begin Image6.Picture.LoadFromFile('G:\Bilder\bla.jpg'); end; procedure TForm1.Image7Click(Sender: TObject); begin Image7.Picture.LoadFromFile('G:\Bilder\bla.jpg'); end; procedure TForm1.Image8Click(Sender: TObject); begin Image8.Picture.LoadFromFile('G:\Bilder\bla.jpg'); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin Table1.Insert end; end. nachher sollte das dann so etwa aussehen procedure TForm1.Button2Click(Sender: TObject); begin If OpenPictureDialog1.Execute then Begin speicher das bild in G:\bilder (hierfür brauch ich den quelltext) und trage G:\bilder\ausgewähtes_foto.jpg in tabele ein (hierfür brauch ich den quelltext) Table1.Edit; Table1.FieldbyName('Bild1').AsString:=OpenPictureDialog1.Filename; Table1.Post; End; end; danke vamp79 [edit=Daniel B]Delphi-Tags; MfG Daniel B.[/edit] |
Hallo,
es wäre Nett wenn Du so lange Code-Ausschnitte einfach als .pas oder .txt anhängen könntest. Ausserdem wäre es sehr sinnvoll, die Delphi-Tags zu benutzen. [*delphi]Code[/delphi] //Ohne das sternchen... Danke! Grüsse, Daniel :hi: |
Zitat:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var dateiname, quelle, ziel : string; begin ziel := 'g:\bilder\'; // "ziel" sollte natürlich Global deklariert sein. Als Konstante oder Variable forcedirectories(ziel); // UNIT FileCtrl if (OpenPictureDialog1.Execute) then //Ein Bild wurde ausgewählt begin quelle := OpenPictureDialog1.FileName; dateiname := ExtractFileName(quelle); //Unit Sysutils CopyFile(PChar(quelle), PChar(ziel + dateiname), false); //Vorhandende Dateien werden nicht überschrieben. Table1.Edit; Table1.FieldbyName('Bild1').AsString := ziel + dateiname; //Abspeichern des neun Ortes des Bildes (g:\bilder\bildname.jpg Table1.Post; end; end; |
@Daniel B:
Großes Sorry, aber du hast schon recht, werde es nächsten so machen wie du es vorgeschlagen hast. Sorry :oops: @Sharky: MEGA GENIAL, funktioniert genau so wie ich es mir gedacht hab. Vielen Vielen Dank :lol: Gruß vamp |
Moin Vamp,
und Sharky hat, im Wesentlichen, das in Codezeilen verpackt, was ich als Text geschrieben hatte (nur damit Du vielleicht den Zusammenhang herstellen kannst). [EDIT] Wozu eigentlich immer die nil Zuweisung bei den Image.Picture Zeilen? [/EDIT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr. |
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