Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism Auf die Eigenschaften eines Forms zugreifen (https://www.delphipraxis.net/37437-auf-die-eigenschaften-eines-forms-zugreifen.html)

Stanlay Hanks 5. Jan 2005 21:45


Auf die Eigenschaften eines Forms zugreifen
 
Hallo zusammen.

Ich habe gerade festgestellt, dass ich sogar zu dumm zu sein scheine, auf die Eigenschaften (Left, Height, Width) eines Formulares zuzugreifen. Bei VCL Anwendungen konnte man noch schreiben: Form1.Height, bei WinForms geht das offensichtlich nicht mehr. Kann mir bei diesem - wahrscheinlich sehr einfach zu lösenden Problem jemand helfen?

Danke schon mal, Stanlay :hi:

Sprint 5. Jan 2005 21:50

Re: Auf die Eigenschaften eines Forms zugreifen
 
Delphi-Quellcode:
  Self.Left
  Self.Top
  Self.Width
  Self.Height

Stanlay Hanks 5. Jan 2005 21:53

Re: Auf die Eigenschaften eines Forms zugreifen
 
Herzlichen Dank :thumb:
Aber wieso funktioniert das nicht mit Form1.Height? Würde mich nur so interessieren (man will ja was lernen :) )

Danke nochmal, Stanlay :hi:

Sprint 5. Jan 2005 22:50

Re: Auf die Eigenschaften eines Forms zugreifen
 
Weil es keine globale Variable mit dem Namen Form1 gibt.

Stanlay Hanks 5. Jan 2005 23:13

Re: Auf die Eigenschaften eines Forms zugreifen
 
:wall: Danke für die Erklärung. Ist ja eigentlich logisch :oops:

Man liest sich, Stanlay :hi:

HomerGER 13. Jan 2005 11:51

Re: Auf die Eigenschaften eines Forms zugreifen
 
Hallo
Und wie funktioniert es wenn ich von einer anderen Form zugreifen will?

Die Control steht auf public
In der 2 Form unter implementation/uses

Homer

Robert_G 13. Jan 2005 11:58

Re: Auf die Eigenschaften eines Forms zugreifen
 
Zitat:

Zitat von HomerGER
Hallo
Und wie funktioniert es wenn ich von einer anderen Form zugreifen will?

Die Control steht auf public
In der 2 Form unter implementation/uses

Homer

Na so wie man es auch unter Delphi macht. ;)
Ist dein 2. Form nur ein Dialog, der erzeugt und wieder zerstört wird erzeugst du eine lokale Instanz.
Soll es zur gesamten Laufzeit bestehen, kannst du es ja als Eigenschaft an dein Hauptform packen (oder wo auch immer es am sinnvollsten ist).
Diese ekligen globalen Designer variablen von Delphi sollte man sowieso nicht verwenden. ;)

HomerGER 13. Jan 2005 12:06

Re: Auf die Eigenschaften eines Forms zugreifen
 
kannst du mir auch sagen wie man das macht?
Bin grade dabei in .net unterzugehen.

Robert_G 13. Jan 2005 12:22

Re: Auf die Eigenschaften eines Forms zugreifen
 
  1. Code:
    SomeForm someForm = new SomeForm();
  2. Code:
    class MainForm :Form
       SomeForm dialog;
     
       public SomeForm Dialog
       {
          get{ return dialog;}
       }

       public MainForm()
       {
          dialog= new SomeForm();
       }
    }
  1. Delphi-Quellcode:
    var
       SomeForm :TSomeForm;
    begin
       SomeForm = TSomeForm.Create();
  2. Delphi-Quellcode:
    type TMainForm = class(Form)
       private fDialog :TSomeForm;
       published property Dialog :TSomeForm read fDialog;
       public constructor Create()
    end;
    implementation

    constructor TMainForm.Create()
    begin
       fDialog := TSomeForm,Create();
    end;

HomerGER 13. Jan 2005 12:33

Re: Auf die Eigenschaften eines Forms zugreifen
 
Hmmm
Ich weiß jetzt nicht ob ich dich verstehe?

hier mal was ich eigentlich machen will

FCL delphi 2005

MainForm

dort habe eine sqlConnection die Steht auf public

und jetzt möchte ich in meiner DB-Unit darauf zugreifen.


ich dachte es geht wie bei VCL

MainForm.sqlConnection.Connectionstring := 'dbirgendwo'

Robert_G 13. Jan 2005 12:46

Re: Auf die Eigenschaften eines Forms zugreifen
 
Zitat:

Zitat von HomerGER
und jetzt möchte ich in meiner DB-Unit darauf zugreifen.

Hängt wohl von der Klasse ab, in der du deine DB-Logik hast.
Wie übergibst du ihr dein Form: Im Constructor? als Property? ,...

Zitat:

Zitat von HomerGER
ich dachte es geht wie bei VCL
Delphi-Quellcode:
MainForm.sqlConnection.Connectionstring := 'dbirgendwo'

Du willst ihr also nicht dein Form, sondern nur die Connection übergeben...

Wobei ich zugeben muss: Ich weiß jetzt nicht ob ich dich verstehe? ;)

p.s.: Der Code weiter oben war nur als absolut abstraktes Beispiel zum Instanzieren eines Forms gedacht. ;)

HomerGER 13. Jan 2005 12:55

Re: Auf die Eigenschaften eines Forms zugreifen
 
Hallo
Hier mal was ich habe


Meine Haupt_Unit HF_Unit
Code:
unit HF_Unit;

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data, System.Data.SqlClient, System.Configuration,
  DB_Unit;

type
  HF = class(System.Windows.Forms.Form)
  {$REGION 'Vom Designer verwalteter Code'}
  strict private
    /// <summary>
    /// Erforderliche Designervariable.
    /// </summary>
    Components: System.ComponentModel.Container;
    Button1: System.Windows.Forms.Button;
    /// <summary>
    /// Erforderliche Methode zur Unterstützung des Designers -
    /// ändern Sie die Methode nicht mit dem Quelltext-Editor
    /// </summary>
    procedure InitializeComponent;
    procedure Button1_Click(sender: System.Object; e: System.EventArgs);
  {$ENDREGION}
  strict protected
    /// <summary>
    /// Ressourcen nach der Verwendung bereinigen
    /// </summary>
    procedure Dispose(Disposing: Boolean); override;
    { Private-Deklarationen }
  public
    Connection1: System.Data.SqlClient.SqlConnection;
    constructor Create;
  end;

  [assembly: RuntimeRequiredAttribute(TypeOf(HF))]

implementation

{$AUTOBOX ON}

{$REGION 'Vom Windows Form-Designer erzeugter Code'}
/// <summary>
/// Erforderliche Methode zur Unterstützung des Designers --
/// ändern Sie die Methode nicht mit dem Quelltext-Editor
/// </summary>
procedure HF.InitializeComponent;
begin
  Self.Connection1 := System.Data.SqlClient.SqlConnection.Create;
  Self.Button1 := System.Windows.Forms.Button.Create;
  Self.SuspendLayout;
  // 
  // Connection1
  // 
  Self.Connection1.ConnectionString := 'data source="D:\HomersPowerShop\1_Pr' +
  'ojekt\1_Programm\DB\DB.mdb";persist security info=False';
  // 
  // Button1
  // 
  Self.Button1.Location := System.Drawing.Point.Create(248, 240);
  Self.Button1.Name := 'Button1';
  Self.Button1.TabIndex := 0;
  Self.Button1.Text := 'Button1';
  Include(Self.Button1.Click, Self.Button1_Click);
  // 
  // HF
  // 
  Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13);
  Self.AutoScroll := True;
  Self.ClientSize := System.Drawing.Size.Create(744, 542);
  Self.Controls.Add(Self.Button1);
  Self.Name := 'HF';
  Self.StartPosition := System.Windows.Forms.FormStartPosition.CenterScreen;
  Self.Text := 'WinForm';
  Self.ResumeLayout(False);
end;
{$ENDREGION}

procedure HF.Dispose(Disposing: Boolean);
begin
  if Disposing then
  begin
    if Components <> nil then
      Components.Dispose();
  end;
  inherited Dispose(Disposing);
end;

constructor HF.Create;
begin
  inherited Create;
  //
  // Erforderlich für die Unterstützung des Windows Forms-Designers
  //
  InitializeComponent;
  //
  // TODO: Fügen Sie nach dem Aufruf von InitializeComponent Konstruktorcode hinzu.
  //
end;

procedure HF.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
  Datenbank_Verbinden_DBU; Hier die Datenbankverbinden
end;

end.

Code:
unit DB_Unit;

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data, System.IO, System.Data.SqlClient;

//Type (öffentlich)

//Konstante (öffentlich)

//Variabele (öffentlich)

//Proceduren (öffentlich)
Procedure Datenbank_Verbinden_DBU();

//Functionen (öffentlich)

implementation

uses
  HF_Unit;


//##############################################################################
//##############################################################################
//
//Datenbank verbinden
//
//##############################################################################
//##############################################################################
Procedure Datenbank_Verbinden_DBU();
var
db_file_s : String;
verbindungs_string_s : String;
begin
  //Datenbank File
  db_file_s := Application.StartupPath + '\DB\' + 'db.mdb';

  if System.IO.File.Exists(db_file_s) then
  begin
    verbindungs_string_s := 'data source=' + db_file_s + ';persist security info=False';

    HF.Create.Connection1.ConnectionString := verbindungs_string_s;

  end
  else
  begin
    MessageBox.Show(db_file_s);
  end;
end;

end.

ich weiß jetzt aber nicht ob "HF.Create.Connection1.ConnectionString" richtig ist

Robert_G 13. Jan 2005 14:57

Re: Auf die Eigenschaften eines Forms zugreifen
 
ähm nunja...
.Net ist eine reine OOP-Umgebung. Delphi.Net lässt zwar solche Dinge wie lose stehende Funktionen zu, mit .Net Programmierung hat das herzlich wenig zu tun. (sowas war auch schon unter Delphi32 unschön ;) )
Aber da du anscheinend nicht viel für OOP übrig hast...

Du brauchst auf jeden Fall kein Formular, genausowenig brauchst du den Name deiner Connection:
Delphi-Quellcode:
procedure DatenbankVerbindenDBU(const aConnection: IDbConnection);
var
   DatabaseFile        : string;
begin
   //Datenbank File
   DatabaseFile := Application.StartupPath + '\DB\db.mdb';

   if &File.Exists(DatabaseFile) then
      aConnection.ConnectionString := System.String.Format('data source={0};persist security info=False'
                                                           [DatabaseFile])
   else
      MessageBox.Show(DatabaseFile);
end;
In deinem Form:
Delphi-Quellcode:
   DatenbankVerbindenDBU(DeineConnection);

HomerGER 13. Jan 2005 15:17

Re: Auf die Eigenschaften eines Forms zugreifen
 
dank erstmal
aber das löst nicht mein Problem
ich möchte gern aus einer Unit auf die Controls auf einer Form zugreifen
wenn ich zB position für Panel, GroupBoxen usw festlege
wollte ich das gerne in einer eigenen Unit machen und dann über ein Ereignis (z.B onClick)auf der Form zugreifen
gibt es da weg unter net?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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