AGB  ·  Datenschutz  ·  Impressum  







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

TObjectList Suchen nach String

Ein Thema von Scorpion · begonnen am 30. Nov 2005 · letzter Beitrag vom 26. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Scorpion

Registriert seit: 3. Nov 2002
Ort: Flörsheim
154 Beiträge
 
Delphi 5 Professional
 
#1

TObjectList Suchen nach String

  Alt 30. Nov 2005, 12:42
Hallo,

ich habe eine TObjectlist erstellt. In ihr befinden sich TImages.

Wie kann ich denn den Index eines Images mit bestimmtem Namen in dieser Liste suchen ?

Thx
Gruß Nico
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TObjectList Suchen nach String

  Alt 30. Nov 2005, 12:45
Du musst die Objectlist Item für Item durchlaufen, die Items auf den entsprechenden Typ (TImage) casten und dann den Namen vergleichen. Also einfach von Hand

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#3

Re: TObjectList Suchen nach String

  Alt 30. Nov 2005, 12:47
Delphi-Quellcode:
function findimage(fname:string):integer;
var i:integer;
begin
  for i:=0 to olist.count-1 do begin
    if (olist[i]as TImage).name=fname then result:=i;
  end;
end;
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TObjectList Suchen nach String

  Alt 30. Nov 2005, 13:28
kleiner Tipp, wenn Du Dir das Casten sparen willst:

eine TImage-Objectliste

Delphi-Quellcode:
interface

type
TImageObjectList = class(TObjectList)
protected
  function GetItem(Index: Integer): TImage;
  procedure SetItem(Index: Integer; AItem: TImage);
public
  function Add(AItem: TImage): Integer;
  function Extract(Item: TImage): TImage;
  function Remove(AItem: TImage): Integer;
  function IndexOf(AItem: TImage): Integer;
  procedure Insert(Index: Integer; AItem: TImage);
  function First: TImage;
  function Last: TImage;
  property Items[Index: Integer]: TImage read GetItem write SetItem; default;
end;

implementation

{ TImageObjectList }

function TImageObjectList.Add(AItem: TImage): Integer;
begin Result := inherited Add(AItem); end;

function TImageObjectList.Extract(Item: TImage): TImage;
begin Result := TImage(inherited Extract(Item)); end;

function TImageObjectList.First: TImage;
begin Result := TImage(inherited First); end;

function TImageObjectList.GetItem(Index: Integer): TImage;
begin Result := TImage(inherited Items[Index]); end;

function TImageObjectList.IndexOf(AItem: TImage): Integer;
begin Result := inherited IndexOf(AItem); end;

procedure TImageObjectList.Insert(Index: Integer; AItem: TImage);
begin inherited Insert(Index, AItem); end;

function TImageObjectList.Last: TImage;
begin Result := TImage(inherited Last); end;

procedure TImageObjectList.SetItem(Index: Integer; AItem: TImage);
begin inherited Items[Index] := AItem; end;

function TImageObjectList.Remove(AItem: TImage): Integer;
begin Result := inherited Remove(AItem);end;
Sven Harazim
--
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: TObjectList Suchen nach String

  Alt 30. Nov 2005, 13:38
Zitat von arbu man:
Delphi-Quellcode:
function findimage(fname:string):integer;
var i:integer;
begin
  for i:=0 to olist.count-1 do begin
    if (olist[i]as TImage).name=fname then result:=i;
  end;
end;
Schick, und was ist, wenn der Name nicht vorhanden ist? Undefinierter Rückgabewert? Klasse - so baut man stabile Programme...
Der Compiler meckert nicht umsonst. Und warum bis zum Ende der Liste durchlaufen, wenn man das gesuchte schon gefunden hat? Wir sind ja nicht in C(++) wo return die Funkion auch gleich verlässt...

Delphi-Quellcode:
function findimage(fname:string):integer;
var
  i: integer;
begin
  Result := -1;

  for i:=0 to Pred(olist.count) do
    if ( olist[i] as TImage ).name = fname Then
    Begin
      result := i;
      Break;
    End;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: TObjectList Suchen nach String

  Alt 25. Jan 2007, 21:52
Statt den Rückgabewert -1 zurückzugeben, wenn der Name nicht gefunden wird, würd ich ein selbst ausgelöste Exception bevorzugen. Ohne Dokumentation, was der Wert -1 bedeutet, kann man damit nix anfangen. Mit einer Fehlermeldung, die einem um die Ohren fliegt schon.

raise exception.Create (format('%s in TImageObjectList not found',[fName])) ;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: TObjectList Suchen nach String

  Alt 25. Jan 2007, 22:41
Zitat von Jelly:
Statt den Rückgabewert -1 zurückzugeben, wenn der Name nicht gefunden wird, würd ich ein selbst ausgelöste Exception bevorzugen. Ohne Dokumentation, was der Wert -1 bedeutet, kann man damit nix anfangen. Mit einer Fehlermeldung, die einem um die Ohren fliegt schon.

raise exception.Create (format('%s in TImageObjectList not found',[fName])) ;
1. Entspricht -1 dem Verhalten von IndexOf() der TList und deren Ableitungen
2. Müsste ich dann jedes suchen nach einem Namen explizit mit einem Try/Except umfassen.
3. Add() muss nicht neu implementiert werden.
4. ist der Thread über 2 Monate alt.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: TObjectList Suchen nach String

  Alt 25. Jan 2007, 23:01
Zitat von Muetze1:
1. Entspricht -1 dem Verhalten von IndexOf() der TList und deren Ableitungen
Geschmackssache, würd ich meinen.

Zitat von Muetze1:
2. Müsste ich dann jedes suchen nach einem Namen explizit mit einem Try/Except umfassen.
Ja. Find ich persönlich übersichtlicher.
Zitat von Muetze1:
3. Add() muss nicht neu implementiert werden.
Hat doch mit Add nix zu tun, oder überseh ich da was.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: TObjectList Suchen nach String

  Alt 25. Jan 2007, 23:32
Zitat von Jelly:
Zitat von Muetze1:
1. Entspricht -1 dem Verhalten von IndexOf() der TList und deren Ableitungen
Geschmackssache, würd ich meinen.

Zitat von Muetze1:
2. Müsste ich dann jedes suchen nach einem Namen explizit mit einem Try/Except umfassen.
Ja. Find ich persönlich übersichtlicher.
Try/Except vergrössert den Code grundlegend um 4 Zeilen und das eigentlich unnötigerweise (aus meiner Sicht), da hier ein einfaches If reicht.

Aber du hast schon Recht, es ist reine Ansichtssache.

Zitat von Jelly:
Zitat von Muetze1:
3. Add() muss nicht neu implementiert werden.
Hat doch mit Add nix zu tun, oder überseh ich da was.
Das hatte nichts mit deinem Code zu tun, sondern mit dem Code von sh17. Das bezog sich nicht auf deinen Beitrag. Hätte ich noch drauf hinweisen sollen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: TObjectList Suchen nach String

  Alt 26. Jan 2007, 06:39
Hallo,

zu den Best-Practices gehört: Niemals eine Exception werfen, wenn die beabsichtigte Funktionalität auch mit anderen Mitteln erreicht werden kann.

Ich greife den Verbesserungsvorschlag von Thomas in Beitrag #5 auf:

Delphi-Quellcode:
function FindImage(ol: TObjectList; const imgName: string; var index: Integer): Boolean;
begin
  index := ol.Count;
  repeat
    Dec(index);
    Result := (index >= 0) and (ol[index] as TImage).Name = imgName);
  until Result or (index < 0);
end;
Die Signatur stimmt jetzt fast mit der allgemeinen VCL Signatur für Find() überein. Der Container wird zum ersten Parameter, wenn durch die Funktion eine Methode simuliert wird. Eine Exception wird jetzt nur geworfen, wenn die Liste ein Object enthält, welches dort nicht erwartet wird.

Ist das wirklich nur eine Geschmacksfrage?

Freundliche Grüße
  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 21:56 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