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/)
-   -   Delphi Werte in dynamisch erzeugtem Form ändern (https://www.delphipraxis.net/136665-werte-dynamisch-erzeugtem-form-aendern.html)

waldforest 5. Jul 2009 16:19


Werte in dynamisch erzeugtem Form ändern
 
Hallo,
ich habe mich erstmals mit zur Laufzeit dynamisch erzeugten Forms beschäftigt. Ziel ist es,, ähnlich wie in Outlook zu arbeiten

Ich habe mit einem Inplace auf einem Panel
http://www.delphipraxis.net/internal...myforminplaced
erste Erfolge erzielt.
Nun möchte ich, z.B. bei einem Download Informationen im Panel ändern, was mit einer Zugriffsverletzung endet.
Ich habe versucht hier im Forum eine für mich als "Anfänger" erklärbare Lösung zu finden, bin aber gescheitert.
Wenn ich die Unit, welche ich über das Inplacing eingebunden habe autark laufen lasse, also zur Laufzeit erzeugt wird, funktioniert alles, so wie ich es gerne hätte.

Wie muss ich meinen Code anpassen damit die Labels auch in dem zur Laufzeit erzeugten Form geändert werden können.

Für eine verständliche Unterstützung wäre ich dankbar.

Delphi-Quellcode:
TDBUpdate = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    ProgressBar1: TProgressBar;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
end;
procedure MyUploadCallback(lpszLocal, lpszRemote: string; dwBytesTotal, dwBytesDone: DWORD; Elapsed: Single);


implementation

{$R *.dfm}


procedure MyUploadCallback(lpszLocal, lpszRemote: string; dwBytesTotal, dwBytesDone: DWORD; Elapsed: Single);
begin
 with DBUpdate do
  begin
    Label1.Caption := 'Filename: ' + lpszLocal;
    Label2.Caption := 'Remotename: ' + lpszRemote;
    Label3.Caption := 'Done: ' + Format('%2.n KB/%2.n KB', [dwBytesDone / 1024, dwBytesTotal / 1024]);
    Label4.Caption := 'Percent: ' + IntToStr(Integer(Round((dwBytesDone * 100) / dwBytesTotal))) + '%';
    ProgressBar1.Max := 100;
    ProgressBar1.Position := Integer(Round((dwBytesDone * 100) / dwBytesTotal));
    Refresh;
 end;
end;
[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]

turboPASCAL 5. Jul 2009 19:27

Re: Werte in dynamisch erzeugtem Form ändern
 
Ich denke mal dass das Problem an deiner dyn. erz. Form liegt.
Warum denn als Inplace und nicht auf normalem Weg ?

waldforest 6. Jul 2009 06:17

Re: Werte in dynamisch erzeugtem Form ändern
 
Hallo,
verstehe die Antwort nicht.
Ich bin ja sogar davon ünberzeugt, dass die "Probleme" über das Inplacing kommen, lässt sich aber doch sicher lösen ?

Ich habe, für meine pers. Weiterentwicklung, mir die Aufgabe gestellt dynamisch die Forms zu erstellen. Dazu wollte ich eine Anwendung im Outlookstil proggen.

Gibt es denn eine andere Möglichkeit ?

himitsu 6. Jul 2009 06:34

Re: Werte in dynamisch erzeugtem Form ändern
 
schau mal nach, was dein Delphi zu MDI-Anwendungen (Multiple Document Interface) sagt ... da befindet sich eine Programmvorlage unter Datei>Neu und die OH müßte zu MDI auch so einiges wissen

mkinzler 6. Jul 2009 06:35

Re: Werte in dynamisch erzeugtem Form ändern
 
Wie und wo erzeugst du die Insatnz?

waldforest 7. Jul 2009 17:07

Re: Werte in dynamisch erzeugtem Form ändern
 
Hallo,
ich erzeuge das Form wie folgt im Main
Delphi-Quellcode:
PROCEDURE TMain.CreateMyFormInplaced(CONST aFormClass: TFormClass; CONST Alignment: TAlign);
VAR
  NewForm : Tform;
BEGIN
  IF Assigned(aFormClass) THEN
    BEGIN
      NewForm := aFormClass.Create(Self);
      NewForm.Visible := False;
      NewForm.BorderStyle := bsNone;
      NewForm.Align := Alignment;
      NewForm.Parent := Panel1;
      NewForm.Show;
      NewForm.AutoScroll:=True;
      NewForm.Width :=Panel1.Width;
      NewForm.Height :=Panel1.Height;
      FreeAndNil(FCurrentForm);
    //  FCurrentForm.Free;
      FCurrentForm := NewForm;
    END;
END;
und rufe wie folgt auf

Delphi-Quellcode:
procedure TMain.JvOutlookBar1Pages0Buttons0Click(Sender: TObject);
begin
CreateMyFormInplaced(TDBUpdate, alClient);
end;

Blup 8. Jul 2009 08:01

Re: Werte in dynamisch erzeugtem Form ändern
 
Du erzeugst zwar ein Formular der Klasse TDBUpdate, weist aber der Variablen DBUpdate diese neue Instanz niemals zu.

1. Im OnCreate: DBUpdate := Self;
2. Im OnDestroy: DBUpdate := nil;
3. In MyUploadCallback nur etwas tun, wenn DBUpdate <> nil

waldforest 8. Jul 2009 16:32

Re: Werte in dynamisch erzeugtem Form ändern
 
Hallo,
super, genau da lag das Problem, nun funktioniert es.

Und wieder mit der Unterstützung des Forums etwas gelernt. vielen Dank !!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz