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 Fehler mit mehreren Formblätter (https://www.delphipraxis.net/85714-fehler-mit-mehreren-formblaetter.html)

fr0g 3. Feb 2007 19:51


Fehler mit mehreren Formblätter
 
Guten Tag

Ich habe ein Programm entworfen was ähnlich wie ICQ ist. Also ein Programm um Messages zu verschicken. Jedoch läuft das ganze im LAN ab. Das Programm funktioniert auch bis jetzt sehr gut. Nur wenn ich mit ein Benutzer schreibe und ein andrer schreibt mich an öffnet sich die Message im selben Fenster. Das sollte natürlich nicht sein. ich hab mir das so wie bei ICQ vorgestellt das man ebend für jeden Benutzer ein eigenes Formblatt hat. Nur dar ja die Anzahl der eingetragenen User Variable ist weiss ich ja nicht vorher wie viele Formblätter ich vorbereiten muss.

Deshalb meine Frage: Wie schaffe ich es das er den Inhalt eines Formblatts kopiert und in ein neuangerichtetes Formblatt gibt? Quasi als eigenes neues Fenster. Bin leider noch Anfänger in Sachen Delphi aber ich will dazu lernen. Also wenn jemand eine Idee hat bitte raus damit.

Danke sagt fr0g :bounce1:

Die Muhkuh 3. Feb 2007 19:56

Re: Formblatt kopieren?
 
Hi,

Du hast etwas wie ICQ und bist noch Anfänger in Sachen Delphi? :gruebel:

Deine Form hat ja einen Namen und per

Delphi-Quellcode:
formx := TFormBlatt.Create(...);
kannst Du eine neue Form erzeugen.

Das ganze noch hübsch ein Array packen (siehe Luke unter mir) und freigeben nicht vergessen.

DGL-luke 3. Feb 2007 19:59

Re: Formblatt kopieren?
 
Das ist ganz einfach.

Du musst die forms nur dynamisch erstellen.

dazu baust du dir ein

Delphi-Quellcode:
sessionforms: array of TSessionForm;
in den private-abschnitt deines hauptformulars.
jetzt kannst du z.B. mal 10 Formulare erstellen:

Delphi-Quellcode:
Setlength(sessionforms, 10);

for i := 0 to high(sessionforms) do
  sessionforms[i] := TSessionForm.Create;
Alles weitere, um eine Hier im Forum suchenForm dynamisch zu erstellen, solltest du hier in der DP finden.

fr0g 3. Feb 2007 22:42

Re: Formblatt kopieren?
 
Boah. Vielen Dank. Das hilft mir sehr!!! :-D

mfg fr0g


P.S.: Ja bin noch Anfänger. Würde mich zumindest nicht als etwas anderes bezeichnen.

fr0g 4. Feb 2007 14:53

Re: Formblatt kopieren?
 
Jetzt hab ich aber das nächste Problem!

Mein Programm soll so aufgebaut sein das sich ein Formblatt öffnet wenn eine Nachricht rein kommt und wenn ich Doppelklick auf ein Benutzer in einer ListBox mache.

Das sich mehrere Formblätter öffnen speziell auf jeden User habe ich folgendermaßen gelöst:
Delphi-Quellcode:
unit ustart;

interface

uses
  Windows, Messages, ...., uicmessage;


type
  TFicyou = class(TForm)
    procedure BenutzerlisteDblClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type FormList=record
     MsgBox:TFicMessageBox;
     end;

var
  Ficyou: TFicyou;
  maxcount:integer;
  form:array [1..255] of FormList;

implementation

uses uicuser;

{$R *.dfm}


procedure TFicyou.FormActivate(Sender: TObject);
VAR Owner:HWnd;
    i:integer;
begin
maxcount:=Benutzerliste.Items.Count;
for i:=0 to maxcount do begin
 form[i].MsgBox:=TFicMessageBox.Create(self);
 form[i].MsgBox.Name:='icY'+IntToStr(i); end;
end;

procedure TFicyou.BenutzerlisteDblClick(Sender: TObject);
VAR FormVaR:integer;
begin
eabsenderip.Text:='';
form[Benutzerliste.ItemIndex].MsgBox.Visible:=true;
end;

end.

Das ist auch alles gut und schön. Wenn ich jetzt aber in meiner Benutzerverwaltung ein weiteren Benutzer hinzufüge und den dann mit Doppelklick öffnen will kommt es immer zu irgendwelchen Fehlern (weil ja die neue Form für den nicht erstellt wird in Activation).

Deshalb wollte ich das er die Forms immer wieder generiert wenn es nötig ist. Nur sind die Namen ja dann doppelt und siehe da: wieder ein Fehler. Mir ist schon klar das er die Forms ja nicht zweimal machen kann. Deswegen wollte ich mal fragen wie ich es schaffe die Forms zu umgehen die bereits erstellt sind? Das er dann quasi nur ein zusätzlich erstellt.

Falls ihr euch fragt warum ich das noch in ein Record gehauen habe! Ich weiss es auch nicht :roteyes:. Ich wollte das ebend nur soviele Forms geöffnet werden wie benötigt werden. Ich könnte jetzt von vornerrein 255 Forms öffnen aber das ist ziemlich unschön. Also ich bin für jede Hilfe dankbar.

Hab auch überlegt bevor er eine Form neu erstellt zu gucken ob der Name schon vergeben is und er dann nur noch die Form auf machen muss statt zu erstellen. Aber dabei bin ich immer wieder auf irgendwelchen Zugriffsfehler gestoßen.

mfg fr0g


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