Autor Beitrag
Grafix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: 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?

ausblenden volle Höhe Delphi-Quelltext
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';  // Name der Datei, die erzeugt werden soll
   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;

 //SQL-Query
 QAbfrage.Active := False;
 QAbfrage.Sql.Clear;
 QAbfrage.Sql.Add('SELECT * FROM adressen ORDER BY Nachname');
 QAbfrage.Active := True;

 top := 5;

 i := 0//Zählvariable für Panelidentifikation
 SLSpeicher := TStringList.Create;


 while not QAbfrage.Eof do
 begin
  //Panel erzeugen
  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); //Höhe des nächsten Panels um x erhöhen
  QAbfrage.Next;
 end;

 LAnzahl.Caption := IntToStr(Tadressen_main.RecordCount); //Anzahl der Einträge ausgeben
end;
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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..
ausblenden Delphi-Quelltext
1:
 if not FileExists('adressen.db'then					

_________________
PROGRAMMER: A device for converting coffee into software.
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 03.05.09 19:44 
Also hier gibt er einen Fehler aus, wieso?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: So 03.05.09 19:50 
user profile iconGrafix hat folgendes geschrieben Zum zitierten Posting springen:
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.
ausblenden 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.

user profile iconGrafix hat folgendes geschrieben Zum zitierten Posting springen:
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
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 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 user profile iconXentar 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 03.05.09 21:48 
Danke für die Tipps, ich habe sie bereits umgesetzt =)