Autor Beitrag
TheD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 27



BeitragVerfasst: Mi 16.04.03 20:22 
Hallöchen,

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
  for iForCBPort := 0 to ComboBoxPort.Items.Count -1 do
  begin
    if not (ComboBoxPort.Items.Strings[iForCBPort] in ('COM1' or 'COM2' or 'COM3')) then
    begin
      ComboBoxPort.Items.Delete(iForCBPort);
    end; //if
  end; //IForCBPort

Damit möchte ich alle Einträge aus einer ComboBox löschen, die nicht COM1-COM3 heissen.

Aber ich erhalte ich der if-Zeile folgende Meldung:
[Error] Unit2.pas(70): Operator not applicable to this operand type

Was mach ich den falsch?

_________________
Bis dannn... TheD!
Wer im Schlachthaus sitzt, sollte nicht mit Schweinen werfen! ;)
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mi 16.04.03 20:28 
Probiers mal mit einem Vergleich mit
ausblenden Quelltext
1:
['COM1', 'COM2','COM3']					


wenn ich mich noch recht entisinne, komme nur grad net annen Delphi-Rechner ran.

Gruß
TheD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 27



BeitragVerfasst: Mi 16.04.03 20:32 
Dann heisst es:

[Error] Unit2.pas(70): Ordinal type required
[Error] Unit2.pas(70): Incompatible types: 'Integer' and 'String'

Weider in der if Zeile.

_________________
Bis dannn... TheD!
Wer im Schlachthaus sitzt, sollte nicht mit Schweinen werfen! ;)
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mi 16.04.03 22:17 
Der in-Operator gibt nur für Sets. Und ein Set ist auf ordinale Typen (Char, Integer aller Art) beschränkt. Das was du vor hast geht aus diesem Grund nicht, weil ein String eben kein einfacher Typ ist sondern ein komplexer. Das Selbe Problem ergibt sich bei der case of-Anweisung.

Man kann sich jedoch eine Abhilfe verschaffen, indem man die offenen Array Parameter ausnützt.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function IsStrIn(const Value: string; const Args: array of string): Boolean;
var i: Integer;
begin
  Result := True;
  for i := 0 to High(Args) do
    if Args[i] = Value then Exit;
  Result := False;
end;

ausblenden Quelltext
1:
2:
3:
begin
  if IsStrIn(ComPort, ['COM1', 'COM2', 'COM3']) then ...
end;

_________________
Ist Zeit wirklich Geld?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 16.04.03 22:43 
Zitat:
weil ein String eben kein einfacher Typ ist sondern ein komplexer
Besser beschrieben wäre es mit "kein aufzählbarer", komplex kann zu vieles heißen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 17.04.03 13:26 
Hallo TheD!

Hat zwar nix mit deinem Thema zu tun, aber du kannst nicht mit einer For-To-Do Schleife Items aus der Liste löschen, da, sobald ein Item gelöscht wurde, die Größe der Liste kleiner wird und du am Ende ein Fehler bekommst, da das Item X gar nicht mehr existiert.
Deshalb nimm für sowas einen While/Repeat-Schleife, bei der du I nur erhöhst, wenn das Item nicht gelöscht wurde.

Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 17.04.03 14:13 
@wulfskin: nicht ganz richtig. Du kannst Die FOR-Schleife beim höchsten Index starten lassen und bis 0 laufen lassen, dann geht das!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 17.04.03 15:49 
Peter Lustig hat folgendes geschrieben:
@wulfskin: nicht ganz richtig. Du kannst Die FOR-Schleife beim höchsten Index starten lassen und bis 0 laufen lassen, dann geht das!
Stimmt ;)!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
TheD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 27



BeitragVerfasst: Fr 18.04.03 15:27 
Oh, ja stimmt, hab da gar nciht dran gedacht. Danke für den Tip.
Frohe Ostern noch. ;)

_________________
Bis dannn... TheD!
Wer im Schlachthaus sitzt, sollte nicht mit Schweinen werfen! ;)