AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ausgabe eines geladenen Records in Memofeldern
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgabe eines geladenen Records in Memofeldern

Ein Thema von Giertier · begonnen am 18. Feb 2009 · letzter Beitrag vom 19. Feb 2009
Antwort Antwort
Seite 2 von 2     12   
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#11

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 09:21
Moin, Moin Giertier.
Das sind ja nun mehrere Dinge, die angepackt werden müssten. Da du offenbar noch nicht so richtig fit mit Delphi bist, stellt sich nun die Frage wo der dringenste Optimierungsbedarf liegt: In der Programmstruktur oder der Aufgabenstellung, auch mehrere Datensätz zu speichern. Ich schlage vor, zunächst die Programmstruktur zu verbessern, sonst wird alles mit jeder zusätzlichen Codezeile noch unübersichtlicher und verworrener. Das Handling mehrerer Datensätze im RecordArray ist dann eher eine Marginalie.
Damit wir dir besser helfen können, ist es wohl das Beste, wenn du den kompletten Source zur Verfügung stellst um im Detail nachzuvollziehen, welche Aufgaben die vorhandenen Module/Formulare haben.
Ralph
  Mit Zitat antworten Zitat
Giertier

Registriert seit: 31. Okt 2008
20 Beiträge
 
Delphi 2005 Personal
 
#12

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 10:11
Heyho ^^

find ich super, dass einem hier so geholfen wird Also, ich will ja nicht, dass ihr die ganze Aufgabe für mich löst , ich wills ja auch verstehn, aber wäre wirklich super, wenn ihr mir an diversen Stellen weiterhelfen könntet, für die ich einfach zu sehr Noob auf diesem Gebiet bin.

Also hier mal der Code

Unit eins, das Startformular.

Startformular

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, jpeg, unit2,unit3, Pfadkopie, ExtDlgs, GraphicEx,GifImage;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    GroupBox2: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    GroupBox3: TGroupBox;
    Button8: TButton;
    Button9: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    Label13: TLabel;
    Button10: TButton;
    Image1: TImage;
    Panel2: TPanel;
    Image2: TImage;
    OpenPictureDialog1: TOpenPictureDialog;
    Label14: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    procedure Button10Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}





procedure TForm1.Button1Click(Sender: TObject);
begin
 close;
end;

procedure TForm1.Button9click(Sender: TObject);
begin
  Form2:= TForm2.Create(Application);
  Form2.Show;
end;

procedure TForm1.Button3Click(Sender: TObject);

begin
Pfad;
end;


procedure TForm1.Button10Click(Sender: TObject);
begin
 Laden;
 Schreiben;
end;

end.
Unit 2, Bildschirm für spätere erweiterte Suche (Hab ich mich bis jetzt noch gar nich drum gekümmert)


Erweiterte Suche

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    Edit13: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit10: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    ComboBox6: TComboBox;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    ComboBox8: TComboBox;
    Label15: TLabel;
    RadioGroup1: TRadioGroup;
    Label16: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit8: TEdit;
    Label17: TLabel;
    Edit9: TEdit;
    Edit11: TEdit;
    Label18: TLabel;
    Edit12: TEdit;
    procedure Button3Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;


implementation

{$R *.dfm}




procedure TForm2.Button3Click(Sender: TObject);
begin
 close;
end;

end.
Unit 3, Formular für die Eingabe der Bilddaten:

Eingabeformular

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label15: TLabel;
    Edit13: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    ComboBox6: TComboBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label18: TLabel;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit8: TEdit;
    Label19: TLabel;
    Edit9: TEdit;
    Label14: TLabel;
    Label20: TLabel;
    Edit10: TEdit;
    GroupBox1: TGroupBox;
    Label17: TLabel;
    ComboBox1: TComboBox;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

uses

unit1, Pfadkopie;

{$R *.dfm}

procedure TForm3.Button3Click(Sender: TObject);
begin
 Form1.enabled := true;
 close;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
 Pfad;
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
 Einlesen;
 Speichern;
 close;
end;



end.
Unit Pfadkopie

Delphi-Quellcode:
unit Pfadkopie;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, jpeg, ExtDlgs;

type
 Bilddaten = record
 RTitel, RAutor, RThema, RAufnahmekontext, RBlende, RBZ1, RBZ2, RBG1, RBG2,
 RAuflösung, RSchlagworte, RBeschreibung, RDat1, RDat2, RDat3, RAFormat, RPfad,
 RFormat: string[100];

 end;

procedure Pfad;
procedure Einlesen;
procedure Speichern;
procedure Laden;
procedure Schreiben;

var
 Datensatz: Bilddaten;




implementation

uses unit1, unit3;

procedure Pfad;
var Zieldatei: string;
begin
 if Form1.OpenPictureDialog1.Execute then
 begin
  Form3.close;
  ZielDatei:= Form1.OpenPictureDialog1.FileName;
  Form1.Image2.Picture.LoadFromFile(Zieldatei);
  Form1.image2.Stretch:= true;
  Form1.image2.proportional:=true;
  Form1.image2.show;
  Form1.Enabled := false;
  Form3:= TForm3.Create(Application);
  Form3.Show;
  Form3.Label20.Caption:= ExtractFileExt(Zieldatei);
  Form3.Label17.Caption:= Zieldatei;

 end;
end;

procedure Einlesen;

begin

Datensatz.RTitel:= Form3.Edit13.Text;
Datensatz.RAutor:= Form3.Edit2.Text;
Datensatz.RThema:= Form3.Edit3.Text;
Datensatz.RAufnahmekontext:= Form3.Edit4.Text;
Datensatz.RBlende:= Form3.Edit1.Text;
Datensatz.RBZ1:= Form3.Edit8.Text;
Datensatz.RBZ2:= Form3.Edit9.Text;
Datensatz.RBG1:= Form3.Edit5.Text;
Datensatz.RBG2:= Form3.Edit6.Text;
Datensatz.RAuflösung:= Form3.Edit10.Text;
Datensatz.RSchlagworte:= Form3.Edit7.Text;
Datensatz.RBeschreibung:= Form3.Memo1.Text;
Datensatz.RDat1:= Form3.ComboBox1.Text;
Datensatz.RDat2:= Form3.ComboBox2.Text;
Datensatz.RDat3:= Form3.ComboBox3.Text;
Datensatz.RAFormat:= Form3.ComboBox6.Text;
Datensatz.RPfad:= Form3.Label17.Caption;
Datensatz.RFormat:= Form3.Label20.Caption;

Form1.Memo1.Text:=
'Titel: '+Datensatz.RTitel+#13#10+#13#10+
'Aufnahmedatum: '+Datensatz.RDat1+Datensatz.RDat2+Datensatz.RDat3+#13#10+#13#10+
'Autor: '+Datensatz.RAutor+ #13#10+#13#10+'Thema: '+Datensatz.RThema+#13#10+#13#10+
'Aufnahmekontext: '+Datensatz.RAufnahmekontext+#13#10+#13#10+
'Blende: '+Datensatz.RBlende+' mm'+#13#10+#13#10;
Form1.Memo2.Text:=
'Belichtungszeit: '+Datensatz.RBZ1+'/'+Datensatz.RBZ2+'s'+#13#10+#13#10+
'Bildgröße: '+Datensatz.RBG1+' x '+Datensatz.RBG2+''+DAtensatz.RAFormat+#13#10+#13#10+
'Auflösung: '+Datensatz.RAuflösung+#13#10+#13#10+
'Schlagworte: '+Datensatz.RSchlagworte+#13#10+#13#10+
'Pfad: '+Datensatz.RPfad+#13#10+#13#10+
'Dateiformat: '+Datensatz.RFormat;
Form1.Label14.Caption:= Datensatz.RBeschreibung;

Form1.Enabled:= true;
end;

procedure Speichern;
var datei: file of Bilddaten;
    i: integer;
begin
 if Form1.Savedialog1.Execute then
  begin
  try
  assignfile(Datei,Form1.Savedialog1.FileName);
  rewrite(datei);
  write(datei);
  finally
  closefile(datei);
  end;
  end;
end;

procedure Laden;
var Datei: file of Bilddaten;
begin
 if Form1.OpenDialog1.Execute then
  begin
  assignfile(datei, Form1.OpenDialog1.FileName);
  reset(datei);
  read(Datei, Datensatz);
  closefile(datei);
  end;
end;

procedure Schreiben;
begin
 Form1.Image2.Picture.LoadFromFile(Datensatz.RPfad);
 Form1.image2.Stretch:= true;
 Form1.image2.proportional:=true;
 Form1.image2.show;
 Form1.Memo1.Text:=
'Titel: '+Datensatz.RTitel+#13#10+#13#10+
'Aufnahmedatum: '+Datensatz.RDat1+Datensatz.RDat2+Datensatz.RDat3+#13#10+#13#10+
'Autor: '+Datensatz.RAutor+ #13#10+#13#10+'Thema: '+Datensatz.RThema+#13#10+#13#10+
'Aufnahmekontext: '+Datensatz.RAufnahmekontext+#13#10+#13#10+
'Blende: '+Datensatz.RBlende+' mm'+#13#10+#13#10;
Form1.Memo2.Text:=
'Belichtungszeit: '+Datensatz.RBZ1+'/'+Datensatz.RBZ2+'s'+#13#10+#13#10+
'Bildgröße: '+Datensatz.RBG1+' x '+Datensatz.RBG2+''+DAtensatz.RAFormat+#13#10+#13#10+
'Auflösung: '+Datensatz.RAuflösung+#13#10+#13#10+
'Schlagworte: '+Datensatz.RSchlagworte+#13#10+#13#10+
'Pfad: '+Datensatz.RPfad+#13#10+#13#10+
'Dateiformat: '+Datensatz.RFormat;
Form1.Label14.Caption:= Datensatz.RBeschreibung;

end;
end.
Das Problem mit der Suche ist jetzt erstmal noch nebensächlich. Eine verbesserte Programmstruktur wäre natürlich super und dann würde ich wie gesagt gerne das Problem anpacken, das jeder Nutzer in einer Datei seine "Datenbank" an Bilddaten Speichern und laden könnte. In den Memofeldern unten soll immer nur der derzeitig ausgewählte oder gerade eingegebene Datensatz erscheinen. Im Panel darüber das zugehörige Bild. Mit dem einen Datensatz klappt das auch recht gut. Der Button Bild aus Liste soll dann noch ein neues Formular mit einer ListBox aufrufen, aus dem der User dann den jeweilig gesuchten Datensatz über den Titel aufrufen können soll, sodass der zugehörige Datensatz (zum gewählten Titel) dann wieder in den Memofelder in Form1 zu sehen ist.

Vielen Dank schonmal im Voraus für eure Weisheiten

Liebe Grüße

Giertier
  Mit Zitat antworten Zitat
Sven M.

Registriert seit: 21. Okt 2006
Ort: Halle/Saale
106 Beiträge
 
Delphi 5 Enterprise
 
#13

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 10:27
[OT]
Da hat sich ein sachlicher Fehler eingeschlichen...
Auf den letzten beiden Forms meinst du, wenn du "mm" als Einheit angibst sicherlich die Brenweite, oder?
Die Blende hat i.d.R. keine Einheit und wird z.B. so angegeben: f3,5
[/OT]


edit: Auch wenn du es im Moment noch nicht um setzen können wirst(??), kannst du es ja mal im Hinterkopf behalten:
Richtig gut wäre es, wenn du die Bilddaten aus den Exif-Metadaten eines Bildes auslesen könntest...
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#14

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 10:36
Hallo Giertier,
ich schau's mir heute Abend mal in Ruhe an (aber vielleicht kommen ja schon vorher von Anderen Verbesserungsvorschläge)
Ralph
  Mit Zitat antworten Zitat
Shana

Registriert seit: 18. Feb 2009
1 Beiträge
 
#15

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 14:05
ich werds mir nachher auch mal ansehen. sieht aber auf jeden fall interessant aus.
シャナ
  Mit Zitat antworten Zitat
Giertier

Registriert seit: 31. Okt 2008
20 Beiträge
 
Delphi 2005 Personal
 
#16

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 17:46
Zitat von Sven M.:
[OT]
Da hat sich ein sachlicher Fehler eingeschlichen...
Auf den letzten beiden Forms meinst du, wenn du "mm" als Einheit angibst sicherlich die Brenweite, oder?
Die Blende hat i.d.R. keine Einheit und wird z.B. so angegeben: f3,5
[/OT]


edit: Auch wenn du es im Moment noch nicht um setzen können wirst(??), kannst du es ja mal im Hinterkopf behalten:
Richtig gut wäre es, wenn du die Bilddaten aus den Exif-Metadaten eines Bildes auslesen könntest...
Mit der Blende hast du natürlich Recht. Hab ich wieder mal nicht richtig nachgeforscht .
Das mit den Exif-Metadaten sagt mir leider überhaupt nix Wie gesagt, ich bin nichtso fit, was Delphi angeht

Aber danke erstmal an alle dafür, dass ihr mir helfen wollt . Find ich echt klasse.

Ich freu mich auf eure Vorschläge
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#17

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 18:06
Hallo Giertier.

Hab's mir jetzt einmal ausführlicher angesehen: Die Oberfläche schaut ja schon mal interessant und recht "aufgeräumt" aus - sehr schön! Nur der Programmcode ist leider (zumindest für mich) sehr schwer lesbar - und vermutlich wird es dir selbst in einiger Zeit ebenso gehen. Da sollte also unbedingt grundlegendes bereinigt werden.

Das Programm bietet sicherlich eine Menge Ausbaupotential. Mit zunehmenden Fähigkeiten könnte es also sein, das du über längere Zeit das Programm weiterentwickelst. In diesem Fall ist es sehr wertvoll, wenn die Basis dafür vorbereitet ist. Sonst macht es einfach keinen Spaß daran zu arbeiten.

Ich empfehle daher, dass du zunächst einmal aussagekräftige Namen für die Formulare und die darauf abgelegten Controls verwendest. Die automatische Namensvergabe macht bereits diesen sehr kurzen Quelltext zur Qual, also z.B. buSave (=Button Speichern), gbImageData (=Groupbox Bilddaten) etc. Die Namen geben also einen Hinweis, um welchen Typ von Control es sich handelt und welche Funktion damit verbunden ist - als Hobbyprogrammierer kann man da seiner Kreativität freien Lauf lassen und muss sich nicht sklavisch an einen StyleGuide halten. Wichtig ist nur, dass man die eigene Regelung auch konsequent einhält. Auch wenn es dich zunächst erst einmal nicht voranbringt: Fang erst einmal damit an. Später zahlt es sich aus und du kannst deutlich effizienter weiterarbeiten!

Der nächste Schritt ist dann die Neuformulierung deiner Unit4 - daraus sollte eine eigen Klasse gemacht werden, die den kompletten FileI/O und die Datenhaltung kapselt. Diese Klasse "kennt" die übrigen Units gar nicht. Alle Form-Units übergeben die Daten an diese Klasse bzw. holen die Daten über spezielle Methoden daraus ab.

Wenn du magst, helfe ich dir dabei gern weiter.

// Frage an die Moderatoren:
Langsam aber sicher entfernen wir uns ja nun von der ursprünglichen Fragestellung. Andererseits sind m.E. die Basics zunächst einmal wichtiger. Können wir diese schrittweise Optimierung in diesem Thread vollziehen, oder soll an dieser Stelle abgebrochen werden?
Ralph
  Mit Zitat antworten Zitat
Giertier

Registriert seit: 31. Okt 2008
20 Beiträge
 
Delphi 2005 Personal
 
#18

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 18:41
Hallo taaktaak,

deine Hilfe nehme ich sehr gerne in Anspruch .

Werde jetzt erstmal die Buttons und den ganzen Kram umbenennen, wie du's geschrieben hast. Bei dem Erstellen einer Klasse haperts dann schon wieder Hab ich noch nie gemacht .

Ich denke auch, dass es vielleicht besser wär, das Problem jetzt nicht mehr in diesem Thread zu diskutieren, hat ja fast nichts mehr mit dem eigentlichen Thema zu tun.

Liebe Grüße und vielen Dank

Giertier
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#19

Re: Ausgabe eines geladenen Records in Memofeldern

  Alt 19. Feb 2009, 20:33
Hallo Giertier.
Ok, einverstanden, dann machen wir außerhalb des Threads weiter.
Wir verabreden dann per PN wie der Source ausgetauscht wird.
Ralph
  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 22:10 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