Autor Beitrag
Jebaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win NT 4, Win XP, Linux
Delphi 7.0
BeitragVerfasst: Fr 29.11.02 10:17 
Hallo zusammnen,

ich bin gerade an einem Chat. Nun habe ich die möglichkeit von Private-Chats eingebaut, was auch einwandfrei funktioniert. Nur, die Private-Chat-Fenster erstelle ich natürlich als Instanzen....nun hab ich auch schon einprogrammiert, dass immer das richtige Fenster aktiviert wird, wenn jemand was sagt...nur, der Text wird immer in den zuletzt erstellten Rich-Edit eingefügt, was bruch ist...er beachtet gar nicht, welches Fenster aktiv ist... Naja, bei einer MDIChild-Anwengung wüsste ich, wie ich mit einer Funtkion das aktive Fenster zurückbekomme, nur halt, will und kann ich keine MDI-App draus machen....please, es muss doch einen einfachen weg gebe, wie ich im aktive Fenster auf die Richedit zugreifen kann...oder?

_________________
...and You will Know us By the Trail of Death.....
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Mo 02.12.02 17:42 
Ich würde es so machen: Da aktive Fenster mit GetActivewindow() ausfindig machen, und eine Message (z.B. Wm_User + 1) hinschicken, mit der Adresse eines PChar als Parameter. Dein Fenster kann darauf reagieren und den PChar in's RichEdit einfügen.

Oder du arbeitest mit DDE, das ist zwar komplizierter, aber wenn du VCL verwendest, kein großes problem (TDdeClientconv und TDdeServerConv).

Oder du schreibst die Daten in einen Temporären Registry-Schlüssel. Das aktive window liest den schlüssel in festen Intervallen und löscht ihn dann.

Ich würde allerdings bei SendMessage() bleiben...
Jebaz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win NT 4, Win XP, Linux
Delphi 7.0
BeitragVerfasst: Mo 02.12.02 18:35 
Titel: Thanks a lot :-)
Hei jow, danke für deine Mühe, find ich echt interessant, deinen Ansatz. Nur das Problem, ich schnall das Prinzip der SendMessages noch nicht ganz, was dazu führt, dass ich nicht nachfollziehen kann, wie ich das genau so lösen soll. Aber das ist überhaupt nicht schlimm :lol:

Denn: Ich hatte zwei Stunden nachdem ich gepostet hatte die Lösung! Ich hab angefangen mit den Sendern herumzuspielen...und wow, ich bin beindruckt, was man für eine Macht besitzt, mit diesen Dingern. Ich merk mir nun beim erstellen eines Fenster dessen Componenten-ID die es auf Form1 bezogen hat in einer Liste. Dann, wenn ich auf die richtige Rich-Edit Komponente zugreifen möchte, geh ich in diese Liste mir di CompID holen (Diese weiss ich, weil ich gleichzeitig eine Liste mit den Fenster-Titeln führe...die ID's der beiden Listen sind gleich, und den Fenster Titel des aktiven Fensters weiss ich auch) und habe eine eigene Funktion erstellt die etwa so aussieht:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm2.FillIn(Sender: TObject; Request: String);
begin
   with Sender as TForm2 do
   begin
       RichEdit1.Lines.Add(Request);
   end;
end;


Und der Aufruf der Prozedur sieht etwa so aus:
ausblenden Quelltext
1:
Form2.FillIn(Form1.Components[IntToStr(Form1.lbCompID.Items.Strings[i])]					

Vorhin muss man noch den Wert von i bestimmen...
ausblenden Quelltext
1:
i := Form1.lbWindowTitles.Items.IndexOf('ActiveWindowTitle');					

soodeli, und soweit funktioniert alles einwandfrei, denn was ich auch mal gelesen hab, Fenster die man als Instanz erstellt werden, nummeriert Windows durch (obwohl man nirgens was davon sieht). Das kann man nur aufrufen mit einem Aufruf der etwa so aussieht:
ausblenden Quelltext
1:
ShowMessage((Sender as TForm2).Owner);					

Dieser Aufruf muss natürlich im zweiten Fenster irgendwo bei einem Event eingefügt werden, also auf dem Fenster, welches als Instanz geöffnet wird.

So, das wärs, wass ich soweit über die Sender rausgefunden hab...ich brauch dieses Problemlösungsverfahren inzwischen in meinem gesamten Chat 8)

_________________
...and You will Know us By the Trail of Death.....