Autor |
Beitrag |
Grafix
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: So 03.05.09 19:36
Hey,
ich möchte, um mein FormCreate überischtlicher zu machen, einige Abläufe in externe Prozeduren schreiben, die vor der FormCreate definiere. Da sich aber einige Elemente auf das Form beziehen (z.B. TTable1), funktionierts nicht. Gibts eine andere Möglichkeit, wie ich das ganze übersichtlicher bekomme?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| procedure TForm1.FormCreate(Sender: TObject); var Name: TLabel; Panel: TPanel; top, i: Integer; SLSpeicher: TStringList; StringList_Inhalt: String; begin if not FileExists('adressen.db') then begin with Tadressen_main do begin TableName := 'adressen'; TableType := ttParadox; with FieldDefs do begin clear; Add('Vorname', ftString, 40, false); Add('Nachname', ftString, 40, false); Add('Strasse', ftString, 40, false); Add('Hausnummer', ftString, 4, false); Add('Ort', ftString, 40, false); Add('PLZ', ftString, 5, false); Add('Telefon', ftString, 20, false); Add('Handy', ftString, 20, false); Add('Email', ftString, 40, false); Add('Kommentar', ftString, 200, false); end; CreateTable; end; end; Tadressen_main.Active := True;
QAbfrage.Active := False; QAbfrage.Sql.Clear; QAbfrage.Sql.Add('SELECT * FROM adressen ORDER BY Nachname'); QAbfrage.Active := True;
top := 5;
i := 0; SLSpeicher := TStringList.Create;
while not QAbfrage.Eof do begin Panel := TPanel.Create(self); Panel.Parent := SBInhalt; Panel.Top := top; Panel.Left := 5; Panel.Tag := i; Panel.OnClick := PanelXClick;
Name := TLabel.Create(self); Name.Parent := Panel; Name.Top := 10; Name.Left := 5; Name.Height := 26; Name.AutoSize := False; Name.Align := alBottom; Name.Alignment := taCenter; Name.Tag := i; Name.OnClick := PanelXClick; Name.Caption := QAbfrage.FieldByName('Vorname').AsString + (' ') + QAbfrage.FieldByName('Nachname').AsString;
StringList_Inhalt := QAbfrage.FieldByName('Nachname').AsString + ',' + QAbfrage.FieldByName('Vorname').AsString; SLSpeicher.Insert(i, StringList_Inhalt); i := i + 1;
inc(top, 50); QAbfrage.Next; end;
LAnzahl.Caption := IntToStr(Tadressen_main.RecordCount); end; |
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 03.05.09 19:39
Wieso müssen die Prozeduren unbedingt vor dem FormCreate aufgerufen werden..?
Ruf die doch IM FormCreate alle nacheinander auf.
Btw: Gewöhn dir direkt wieder diese relativen Pfade ab..
Delphi-Quelltext 1:
| if not FileExists('adressen.db') then |
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: So 03.05.09 19:44
Also hier gibt er einen Fehler aus, wieso?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure exisitert_tabelle; begin <hier code, der z.B. die TTabel anspricht> end;
procedure anzeigen; begin
end;
procedure TForm1.FormCreate(Sender: TObject); begin existiert_tabelle; end; |
Bezüglich des relativen Pfads, soll ich ihn direkt angeben? Aber wenn ich das später in ein Installationsprogramm packe, ergibt der statische Pfad doch kein Sinn mehr oder?
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 03.05.09 19:50
Grafix hat folgendes geschrieben : | Also hier gibt er einen Fehler aus, wieso? |
Verrat uns bitte nicht, WAS für ein Fehler.. wir raten ja viel lieber...
Vermutung: Du hast eine Prozedur erstellt, diese gehört aber nicht zum Formular, kennt somit die Table nicht.
Lösung: Mach eien Methode draus.
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.exisitert_tabelle; begin <hier code, der z.B. die TTabel anspricht> end; |
Musst du dann natürlich auch noch im Interface-Abschnitt hinzufügen unter private.
Grafix hat folgendes geschrieben : | Bezüglich des relativen Pfads, soll ich ihn direkt angeben? Aber wenn ich das später in ein Installationsprogramm packe, ergibt der statische Pfad doch kein Sinn mehr oder? |
Deswegen gibt es ja Möglichkeiten, ausgehend vom Programmverzeichnis zu arbeiten.. such mal nach Application.Exename
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 03.05.09 19:52
An der Stelle kommt der Fehler, wenn du auf Form1.Label... usw. zugreifst, denn die erstellte Instanz wird ja erst danach der Variablen zugewiesen.
Wenn du es wie Xentar geschrieben hat als Methode des Formulars schreibst, dann geht das. Du darfst aber nicht Form1. benutzen, sondern entweder nix oder Self., dann geht das auch.
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: So 03.05.09 19:58
das mit dem Raten klappt doch schon nicht schlecht
sry, war unpräziese ausgedrückt, der Fehler der kam war eine Zugriffsverletzung. Klappt jetzt. Dummer Fehler, hätte ich wissen müssen, manchmal steht man einfach vor einer Wand^^
Danke für die Hilfe
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
|
Verfasst: So 03.05.09 20:47
Hallo Grafix,
vielleicht noch ein Tipp.
In Deiner Form1.Create Procedure wird die Anzeige der Daten, die Verarbeitung der Daten, die Erstellung einer Tabelle für eine Datenbank bunt gemischt.
Übersichtlicher wird das ganze, wenn Du die einzelnen Schritte trennst. Die Erstellung und die Verarbeitung der Daten mittels einer Datenbank würden in einer separaten Unit für mehr Transparenz sorgen.
Bis bald Chemiker
|
|
Grafix 
      
Beiträge: 122
Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
|
Verfasst: So 03.05.09 21:48
Danke für die Tipps, ich habe sie bereits umgesetzt =)
|
|
|