AGB  ·  Datenschutz  ·  Impressum  







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

Dynamische Fenster und deren zuordnung

Ein Thema von Novo · begonnen am 6. Aug 2009 · letzter Beitrag vom 7. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Novo

Registriert seit: 27. Mai 2007
122 Beiträge
 
Delphi 7 Enterprise
 
#1

Dynamische Fenster und deren zuordnung

  Alt 6. Aug 2009, 14:07
Und zwar geht es nach dem hier:
http://www.delphipraxis.net/internal....php?p=1066031
mit meinen Problemen weiter.

Ich will ein eigenes, kleines ICQ Client schreiben und will nicht jedesmal (MSG empfangen / Nachricht schreiben)
ein NEUES Fenster aufmachen, sondern nur EIN Fenster mit Dynamischen Tabs haben.

Das habe ich teilweie hinbekommen, allerdings funktioniert das nicht einwandfrei.

Und zwar:
wenn neue Nachricht reinkommt oder ich eine neue nachricht schreiben will:
ICQ UIN nehmen, daraus panel_UIN dynamisch erzeugen und anzeigen.

Delphi-Quellcode:
procedure TfrmMain.lstBoxKontakteDblClick(Sender: TObject);
var
  newTabSheet: TTabSheet;
  newRichEdit: TRichEdit;
  newPanel: TPanel;
  newlabel: TLabel;
  aItem: TListItem;
begin
  if lstBoxKontakte.Selected = nil then Exit;

  aItem := lstBoxKontakte.Selected;
  AktuellerNICK := aItem.Caption;
  AktuelleUIN := aItem.SubItems[0];

  try

  newTabSheet := TTabSheet.Create(frmChat.PageControlChat);
  newTabSheet.Caption := AktuellerNICK;
  newTabSheet.Name := 'tab_' + AktuelleUIN;
  newTabSheet.PageControl := frmChat.PageControlChat;
  newTabSheet.Parent := frmChat.PageControlChat;
  frmChat.PageControlChat.ActivePage := newTabSheet;

  newRichEdit := TRichedit.Create(newTabSheet);
  TWinControl(newRichEdit).Name := 'edt_' + AktuelleUIN;
  TWinControl(newRichEdit).Parent := newTabSheet;
  newRichEdit.Align := alClient;

  newPanel := TPanel.Create(newTabSheet);
  TWinControl(newPanel).Name := 'panel_' + AktuelleUIN;
  TWinControl(newPanel).Parent := newTabSheet;
  TWinControl(newPanel).Height := 30;
  newPanel.Align := alTop;

  newLabel := TLabel.Create(newPanel);
  TWinControl(newLabel).Name := 'labelNICK_' + AktuelleUIN;
  TWinControl(newLabel).Parent := newPanel;
  newLabel.Align := alTop;

  newLabel := TLabel.Create(newPanel);
  TWinControl(newLabel).Name := 'labelUIN_' + AktuelleUIN;
  TWinControl(newLabel).Parent := newPanel;
  newLabel.Align := alBottom;


  except
   //Wenn nicht erzeugbar -> schon vorhanen -> dann will ich zu dem Tab switchen
   //GEHT NICHT! Variable 'newTabSheet' ist nicht initialisiert worden
   frmChat.PageControlChat.ActivePage := newTabSheet; // .ActivePage := 'tab_' + AktuelleUIN; geht NICHT!
  end;

if frmChat.Showing = false then frmChat.Show;
end;
Allerdings, wie prüfe ich, ob panel_UIN schon existiert?
wenn NEIN -> wie oben erzeugen und öffnen
wenn JA -> Diesen Tab aktiv machen (wie?)

Ausserdem muss ich ja die MSG dann an den RICHTIGEN senden, deshalb habe ich auch
labelUIN und labelNICK erzeugt, wo die aktuelle Daten des aktiven Tabs drinstehen.
die müsst ich dann ja nur auslesen udn an die labelUIN schicken.

Dann habe ich Dynamische Tabs mit einem schliessen Button erzeugt,
allerdings lässt sich das nur von Unit/Form 2 aus erzeugen, nicht von Unit/Form1 (NACH dem Public machen)

aber seht selbst, hier ist alles was ihr braucht zum nachvollziehen:
---


Mag mir einer vielleicht bei dem Projekt am Wochenende ein wenig per ICQ helfen?
Dynamische Tabs und deren Steuerung/verwalung

[edit=SirThornberry]Titel geändert - Hilfe braucht wohl jeder der in dieser Kategorie postet und sagt nichts über das Problem selbst aus Mfg, SirThornberry[/edit]
Angehängte Dateien
Dateityp: rar novo_s_icq_180.rar (560,7 KB, 5x aufgerufen)
Takeo
Don't make me angry...
You wouldn't like me when I'm angry!
Blut ist leben, Leben ist Blut, ins Licht geboren suchen wir die Dunkelheit!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: [HELP?] Dynamische Fenster und deren zuordnung

  Alt 6. Aug 2009, 14:55
Vielleicht geht es mit einem TabControl einfacher...
Da verwendest Du die selben "internen" Controls und weist diesen einfach bei einem Tabwechsel andere Verbindungsdaten zu...
  Mit Zitat antworten Zitat
Novo

Registriert seit: 27. Mai 2007
122 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: [HELP?] Dynamische Fenster und deren zuordnung

  Alt 6. Aug 2009, 15:40
Zitat von stahli:
Vielleicht geht es mit einem TabControl einfacher...
Da verwendest Du die selben "internen" Controls und weist diesen einfach bei einem Tabwechsel andere Verbindungsdaten zu...
TabControl?
mmh hab jetzt aber alles mit TPageControl gemacht.
Bisher geht eigentlich alles, bis auf die gute/saubere Art und weise, dem Tab nen Namen zu geben bzw. zu speichern,

Damit ich beim Empfangen / Senden der Nachricht weiss, Tab_X = Kontakt_Y und der hat ICQ Nummer UIN_Z


Und dann wäre da nochwas zu klären...

1. Wenn ich schliesse, ist der RichEdit Chatlog WEG, das doof ...
(History speichern oder doch nur hide anstelle von close?)

2. Überprüfung von schon erzeugten Tabs.
Wenn Tab mit tab_ICQUIN_X schon erzeugt ist -> Active Page Control -> tab_ICQUIN_X
(leider kann ich NICHT: PageControlChat.ActivePage := tab_ICQUIN_X (name als string) machen
und wenn noch nicht erzeugt -> erstellen (.create)


http://img5.imagebanana.com/img/7m5xc7cz/tab.png
Takeo
Don't make me angry...
You wouldn't like me when I'm angry!
Blut ist leben, Leben ist Blut, ins Licht geboren suchen wir die Dunkelheit!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [HELP?] Dynamische Fenster und deren zuordnung

  Alt 6. Aug 2009, 15:46
Du könntest das TabSheet entweder über FindComponent suchen oder gleich alle in einer TObjectList verwalten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Novo

Registriert seit: 27. Mai 2007
122 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [HELP?] Dynamische Fenster und deren zuordnung

  Alt 6. Aug 2009, 15:47
Zitat von DeddyH:
Du könntest das TabSheet entweder über FindComponent suchen oder gleich alle in einer TObjectList verwalten.
über FindComponent hab ich schon die funktion "GetActiveRichEdit" gemacht, wär ne idee ...
Takeo
Don't make me angry...
You wouldn't like me when I'm angry!
Blut ist leben, Leben ist Blut, ins Licht geboren suchen wir die Dunkelheit!
  Mit Zitat antworten Zitat
Novo

Registriert seit: 27. Mai 2007
122 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Dynamische Fenster und deren zuordnung

  Alt 7. Aug 2009, 08:52
Ich hab jetzt noch ein Problem:

Delphi-Quellcode:
procedure TfrmMain.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var
  newTabSheet: TTabSheet;
  newRichEdit: TRichEdit;
  newPanel: TPanel;
  newlabel: TLabel;
  aItem: TListItem;
  i: integer;
begin

  AktuelleUIN := UIN;
  AktuellerNICK := AktuelleUIN;

  for i := 0 to lstBoxKontakte.Items.Count-1 do
  begin
  aItem := lstBoxKontakte.Items[i];
  if aItem.SubItems[0] = AktuelleUIN then AktuellerNICK := aItem.Caption;
  end;

  try
  newTabSheet := TTabSheet.Create(frmChat.PageControlChat);
  newTabSheet.Caption := AktuellerNICK;
  newTabSheet.Name := 'tabChat_' + AktuelleUIN;
  newTabSheet.PageControl := frmChat.PageControlChat;
  newTabSheet.Parent := frmChat.PageControlChat;
  frmChat.PageControlChat.ActivePage := newTabSheet;
  frmChat.ShowTabButton(newTabSheet.PageIndex);
  frmChat.ReCalculateButtonPositions;

  newRichEdit := TRichedit.Create(newTabSheet);
  TWinControl(newRichEdit).Name := 'edtChat_' + AktuelleUIN;
  TWinControl(newRichEdit).Parent := newTabSheet;
  newRichEdit.Align := alClient;

  newPanel := TPanel.Create(newTabSheet);
  TWinControl(newPanel).Parent := newTabSheet;
  TWinControl(newPanel).Height := 28;
  newPanel.Align := alTop;

  newLabel := TLabel.Create(newPanel);
  TWinControl(newLabel).Name := 'NICK_' + AktuelleUIN;
  TWinControl(newLabel).Parent := newPanel;
  newLabel.Align := alLeft;

  //Platzhalter zwischen NICK und UIN
  newLabel := TLabel.Create(newPanel);
  TWinControl(newLabel).Parent := newPanel;
  newLabel.Align := alLeft;

  newLabel := TLabel.Create(newPanel);
  TWinControl(newLabel).Name := 'UIN_' + AktuelleUIN;
  TWinControl(newLabel).Parent := newPanel;
  newLabel.Align := alLeft;
  except
     //
  end;

//BUG: Curret Richedit ist falsch! -> 'edtChat_' + AktuelleUIN.Lines.Add
frmChat.CurrentRichEdit.Lines.Add(AktuelleUIN + ': ' + Msg);

if frmChat.Showing = false then frmChat.Show;
end;
ganz am Ende das:
frmChat.CurrentRichEdit.Lines.Add(AktuelleUIN + ': ' + Msg); Das ist falsch, so kommt die msg eines anderen users in ein falsches RichEdit eines anderen Users,
eben weil ein anderes gerade aktiv ist.

Man müsste sagen können:
Delphi-Quellcode:
var
 name : string;

name := 'edtChat_' + AktuelleUIN

//und dann:
frmChat.name.Lines.Add

//Das geht aber nicht!
//Wie kann ich den KomponentenNamen zum ansteuern benutzen?
Takeo
Don't make me angry...
You wouldn't like me when I'm angry!
Blut ist leben, Leben ist Blut, ins Licht geboren suchen wir die Dunkelheit!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Dynamische Fenster und deren zuordnung

  Alt 7. Aug 2009, 09:05
Hatte ich mich so unklar ausgedrückt? Schau mal, wie man FindComponent anwendet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Novo

Registriert seit: 27. Mai 2007
122 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Dynamische Fenster und deren zuordnung

  Alt 7. Aug 2009, 10:44
Zitat von DeddyH:
Hatte ich mich so unklar ausgedrückt? Schau mal, wie man FindComponent anwendet.
Hab ich doch, funktioniert nicht so wie ich will.

TRichEdit(findcomponent('edtChat_' + AktuelleUIN)).Lines.Add(AktuelleUIN + ': ' + Msg); Das Problem wird wohl daran liegen, dass ich den Code oben auf frmMain anwende, die gesuchte Komponente sich aber auf frmChat befindet.

TfrmMain.TRichEdit(findcomponent('frmMain.edtChat_' + AktuelleUIN)).Lines.Add(AktuelleUIN + ': ' + Msg); oder
TRichEdit(findcomponent('edtChat_' + AktuelleUIN)).Lines.Add(AktuelleUIN + ': ' + Msg); geht aber nicht.


EDIT:
Eigentlich müsste es jetzt so gehen:
TRichEdit(frmChat.FindComponent('edtChat_' + AktuelleUIN)).Lines.Add(AktuelleUIN + ': ' + Msg); aber ich bekomme dann eine Zugriffsverletzung.

und wenn ich:
Delphi-Quellcode:
if frmChat.FindComponent('edtChat_' + AktuelleUIN) as TRichEdit <> nil
then
TRichEdit(frmChat.FindComponent('edtChat_' + AktuelleUIN)).Lines.Add(AktuelleUIN + ': ' + Msg);
mache, findet er sie trotzdem nicht.
Sie wurde aber 100%ig vorher erzeugt:

Delphi-Quellcode:
  newTabSheet := TTabSheet.Create(frmChat.PageControlChat);
  newTabSheet.Caption := AktuellerNICK;
  newTabSheet.Name := 'tabChat_' + AktuelleUIN;
  newTabSheet.PageControl := frmChat.PageControlChat;
  newTabSheet.Parent := frmChat.PageControlChat;
  frmChat.PageControlChat.ActivePage := newTabSheet;
  frmChat.ShowTabButton(newTabSheet.PageIndex);
  frmChat.ReCalculateButtonPositions;

  newRichEdit := TRichedit.Create(newTabSheet);
  TWinControl(newRichEdit).Name := 'edtChat_' + AktuelleUIN;
  TWinControl(newRichEdit).Parent := newTabSheet;
  newRichEdit.Align := alClient;
Takeo
Don't make me angry...
You wouldn't like me when I'm angry!
Blut ist leben, Leben ist Blut, ins Licht geboren suchen wir die Dunkelheit!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Dynamische Fenster und deren zuordnung

  Alt 7. Aug 2009, 10:53
Nach kurzem Überfliegen des Source aus dem Ausgangspost müsstest Du IMO so vorgehen (Beispiel):
Delphi-Quellcode:
var compo: TComponent;
begin
  compo := frmChat.PageControlChat.FindComponent(<Name des TabSheets>);
  if Assigned(compo) then
    compo := compo.FindComponent(<Name des RichEdits>);
  if Assigned(compo) then
    (compo as TRichEdit).Lines.Add('Wuppdi');
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Novo

Registriert seit: 27. Mai 2007
122 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Dynamische Fenster und deren zuordnung

  Alt 7. Aug 2009, 10:58
Zitat von DeddyH:
Nach kurzem Überfliegen des Source aus dem Ausgangspost müsstest Du IMO so vorgehen (Beispiel):
Delphi-Quellcode:
var compo: TComponent;
begin
  compo := frmChat.PageControlChat.FindComponent(<Name des TabSheets>);
  if Assigned(compo) then
    compo := compo.FindComponent(<Name des RichEdits>);
  if Assigned(compo) then
    (compo as TRichEdit).Lines.Add('Wuppdi');
end;
leider nein.
es öffnet sich zwar das Fenster, allerdings kommt keine Message an.

Delphi-Quellcode:
  compo := frmChat.PageControlChat.FindComponent('edtChat_' + AktuelleUIN);
  if Assigned(compo) then
   compo := compo.FindComponent('edtChat_' + AktuelleUIN);
  if Assigned(compo) then
   (compo as TRichEdit).Lines.Add(AktuelleUIN + ': ' + Msg);
Takeo
Don't make me angry...
You wouldn't like me when I'm angry!
Blut ist leben, Leben ist Blut, ins Licht geboren suchen wir die Dunkelheit!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:07 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