Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Form überall wiederverwenden? Dafür Unit?

  Alt 28. Jan 2009, 10:11
@DJ-SPM: Vor dem Implementation-Teil deklariert man keine Variablen...
Zitat von DJ-SPM:
Delphi-Quellcode:
:
var
  fSettings: file of TSettings;
  dSettings: TSettings;
:
@Hansa: Wenn jetzt noch die unnötige, globale Variable rausfliegt, dann wird das langsam brauchbar...
Zitat von Hansa:
Delphi-Quellcode:
interface

uses
  StdCtrls, ComCtrls, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset,
  ZConnection, Graphics, SysUtils, DumbCrypt, Messages, Dialogs, Forms,
  Classes, UNITTCONTACTFORM;

type
  TSearchContactForm = class(TContactForm)
    SearchField: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure SearchFieldKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private

  public

  end;

  TSettings = record
    skin: String[100];
    color: TColor;
    boxcolor: TColor;
    logo: String[255];
    winstart: Boolean;
    host: String[100];
    port: Integer;
    Name: String[30];
    User: String[30];
    Pass: String[50];
  end;

function AssignConfigFile(filename: String): Boolean;
function InitDBConnection(ZConnection: TZConnection): Boolean;
function getSesstings:TSesstings;

implementation

var
  dSettings: TSettings;

function getSesstings:TSesstings;
begin
  Result:=dSettings;
end;

function AssignConfigFile(filename: String): Boolean;
var
  fSettings: file of TSettings;
begin
  {...}
end;

function InitDBConnection(ZConnection: TZConnection): Boolean;
begin
  {...}
end;

procedure TSearchContactForm.SearchFieldKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ShowMessage('SD');
end;
Tja, was ist das ? Eine abgeleitete Form. Alles aus der Ursprumgs-Unit ist ja bereits bekannt. Es werden nur noch die Änderungen innerhalb der neuen Form extra neu deklariert. Das kann im OI gemacht werden und steht dann in der DFM.

Nun gut, ca. 2 Mausklicks, dann siehts (bei mir) so aus wie im Anhang. Erzeugter Quelltext :

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TfrmArtSuch1 = class(TfrmArtSuch)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

implementation

{$R *.dfm}

procedure TfrmArtSuch1.FormCreate(Sender: TObject);
begin
  inherited;

end;

end.
Das ist auch eine Suchform, die öfters und in diversen Projekten gebraucht wird. Das noch leere FormCreate kam eben hier dazu. Die Buttons etc. wurden schon im Vorgänger in Etwa richtig positioniert, die Schriftart auf fett gesetzt usw.
Aufruf:
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender:TObject);
var frmArtSuch1:TfrmArtSuch1;
begin
  frmArtSuch1:=TfrmArtSuch1.create(Self);
  try
    if frmArtSuch1.ShowModual = mrOK then begin
    end;
  finally
    frmArtSuch1.release;
  end;
end;
Somit wird die Form nur solange im Speicher gehalten, wie sie benötigt wird. Also so oft wie möglich "Verfügbare Formulare" anlegen "Automatisch erzeugen" nur dann wenn es unbedingt sein muss (und das heißt meistens: nur die Hauptform automatisch erzeugen)

So und jetzt könnt Ihr ja wieder auf mich eindreschen...
  Mit Zitat antworten Zitat