AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler mit mehreren Formblätter

Offene Frage von "fr0g"
Ein Thema von fr0g · begonnen am 3. Feb 2007 · letzter Beitrag vom 4. Feb 2007
Antwort Antwort
fr0g

Registriert seit: 11. Dez 2006
28 Beiträge
 
#1

Fehler mit mehreren Formblätter

  Alt 3. Feb 2007, 20:51
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
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Formblatt kopieren?

  Alt 3. Feb 2007, 20:56
Hi,

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

Deine Form hat ja einen Namen und per

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.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Formblatt kopieren?

  Alt 3. Feb 2007, 20:59
Das ist ganz einfach.

Du musst die forms nur dynamisch erstellen.

dazu baust du dir ein

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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
fr0g

Registriert seit: 11. Dez 2006
28 Beiträge
 
#4

Re: Formblatt kopieren?

  Alt 3. Feb 2007, 23:42
Boah. Vielen Dank. Das hilft mir sehr!!!

mfg fr0g


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

Registriert seit: 11. Dez 2006
28 Beiträge
 
#5

Re: Formblatt kopieren?

  Alt 4. Feb 2007, 15:53
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 . 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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 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