![]() |
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 ![]() 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:
[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
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; |
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 ? |
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 ? |
Re: Werte in dynamisch erzeugtem Form ändern
schau mal nach, was dein Delphi zu MDI-Anwendungen (
![]() |
Re: Werte in dynamisch erzeugtem Form ändern
Wie und wo erzeugst du die Insatnz?
|
Re: Werte in dynamisch erzeugtem Form ändern
Hallo,
ich erzeuge das Form wie folgt im Main
Delphi-Quellcode:
und rufe wie folgt auf
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;
Delphi-Quellcode:
procedure TMain.JvOutlookBar1Pages0Buttons0Click(Sender: TObject);
begin CreateMyFormInplaced(TDBUpdate, alClient); end; |
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 |
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