Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TListView für Win9x?


Delete - Di 02.11.04 19:00
Titel: TListView für Win9x?
Hallo,
ich musste feststellen, dass die TListView-Komponente auf Windows 98 (wahrscheinlich auch 95) keine Einträge anzeigt. Aus diesem Grund suche ich eine TListView, die möglichst haargenau der delphieigenen gleicht, aber Win9x kompatibel ist.


jaenicke - Mi 03.11.04 14:58

Moment: Die TListView IST Windows9x kompatibel. Meine Programme laufen alle problemlos unter Windows 95, 98 und ME, und die benutzen die Komponente auch. Da ist wohl in deinem Programm was schief gegangen.


Delete - Mi 03.11.04 20:13

Offenbar ja. Das Problem liegt devinitiv wo anders.


jaenicke - Do 04.11.04 13:55

Warum postest du nicht einfach mal deinen Code? Dann könnten wir dir helfen, den Fehler zu finden.


Delete - Do 04.11.04 18:59

Ok, meinetwegen. Allerdings geht dieses Problem jetzt in eine ganz andere Richtung.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
function ConvertTo255(IP: string):string// Ermittlung der vermeintlichen Broadcast-IP
var
  loop: integer;
begin
  for loop := length(IP) downto 0 do
    if IP[loop] = '.' then
    begin
      result := copy(IP,1,loop)+'255';
      break;
    end;
end;

procedure SendPing(Info: TInfo); // Routine zum Senden eines Ping-Datenpakets à la "I`m still here"
var
  BroadCastIP: string;
  Stream: TMemoryStream;
begin
  BroadCastIP := Convertto255(Form1.idIPWatch1.LocalIP);
  Form1.UdpClient.Host := BroadCastIP;
  Stream := TMemoryStream.Create;
  Stream.Write(PING, SizeOf(PING));
  Stream.Write(Info, SizeOf(Info));
  Form1.UDPClient.SendStream(Stream);
  Stream.Free;
end;


Das ist ein Auszug aus meinem UDP-Chat, der ohne Server konzipiert ist. Jeder Client sendet regelmäßig einen Ping an die Broadcast-IP, die aufgrund der eigenen IP (vollkommen unfundiert) ermittelt wird. Es wird halt immer die eigene IP genommen und ans Ende eine 255 geschrieben.
Empfangen wird mit diesem Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.UDPServerInput(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  Signal: integer;
begin
  AData.Read(Signal, SizeOf(Signal));
  If Signal = PING then
    inProcessPing(Abinding.PeerIP, AData) // Dieser Fall müsste eintreten! Es passiert nichts.
  else if Signal = TEXT_MESSAGE then
    inProcessMessage(Abinding.PeerIP, Adata)
  else if Signal = SHUTDOWN then
    inRemoveClient(ABinding.PeerIP)
  else if Signal = SET_CURSOR then
    inSetCursor(ABinding.PeerIP, AData)
  else if Signal = SET_DESKTOP then
    inSetFalseDesktop;
end;


Das Kompatibilitätsproblem sieht nun so aus:
WinXP und Win9x können die Datenpakte senden, sprich Win9x-Rechner werden von anderen Rechner gesehen. Empfangen kann aber nur ein WinXP-Rechner. Worin kann nun das Problem liegen?

P.S.: @admins: evt Thread teilen und verschieben


wulfskin - Do 04.11.04 19:41

Hallo Elite,

ich hatte mal ähnliche Probleme mit den Komponenten TCLientSocket und TServerSocket. Hab diese damals auch leider nicht lösen können. Allerdings weiss ich aus Erfahrung, dass die Verbindung mit den UDP-Komponenten funktioniert.
Es gibt für Win95 ein Update, welches die Sockets in irgend einer Weise repariert. Hast du das schonmal ausprobiert (Such nach "Socket Update" oder so)?

Gruß Hape!


Delete - Do 04.11.04 19:47

Achso, kleine Ergänzung: Es handelt sich um die Indy-UDP Komponenten. Gilt deine Antwort auch dafür?