AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Komisches Verhalten beim Listbox durchsuchen
Thema durchsuchen
Ansicht
Themen-Optionen

Komisches Verhalten beim Listbox durchsuchen

Ein Thema von XXcD · begonnen am 23. Jun 2008 · letzter Beitrag vom 25. Jun 2008
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

Komisches Verhalten beim Listbox durchsuchen

  Alt 23. Jun 2008, 22:20
Hallo,
ich schreibe gerade einen kleinen HTTPServer, dort möchte ich feststellen ob das Request Dokument in einer Listbox steht.

Hier mal der Code zum durchsuchen:
Delphi-Quellcode:
function inlist(list: TListbox; Request: string): Boolean;
var
  I: Integer;
begin
  I := List.Items.IndexOf(Request);
  if I >= 0
  then
  begin
  Result:=true;
  end
  else
  begin
  Result:=false;
  end;
end;
Und in CommandGet hab ich folgendes:
Delphi-Quellcode:
  if inlist(Form2.ListBox1, RequestedDocument)=true then
  begin
  Log(RequestedDocument);
  end
  else
  begin
  Log(RequestedDocument);
 RequestedDocument :='index.html';
  end;

Ich habe ein Bild angehängt da sieht man den Fehler der beim Schließen des programms auftritt.
Angehängte Grafiken
Dateityp: bmp neu_bitmap_305.bmp (159,0 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 23. Jun 2008, 23:22
Ich habe den Fehler gefunden, ich muss alle Formulare einmal geöffnet haben um darauf zuzugreifen. Lässt sich soetwas auch beim Start der Anwendung einbauen?
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 24. Jun 2008, 01:01
Ja, das geht schon. Ein geeigneter Ansatz wäre, die Daten aus der Listbox zu befreien und in Containerklassen (z.B. TObjectList) zu verpacken. Du kannst die Daten dann in der Listbox anzeigen lassen, indem du sie einfach bei Bedarf aus der Containerklasse holst. Siehe Delphi-Referenz durchsuchenTCustomListBox.Style Eigenschaft
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
marabu

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

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 24. Jun 2008, 05:59
Moin,

nur am Rande:

Tauchen Objekte in der Signatur deiner Funktion auf, dann solltest du die Klasse mit der größtmöglichen Abstraktion verwenden. Da du in der Funktion InList() auf keine andere Eigenschaft der ListBox zugreifst, solltest du gleich die Items übergeben. Deren abstrakte Klasse ist TStrings, was zu einer Anpassung des Funktionsnamens führt. Wenn du dann noch deinen Code etwas vereinfachst, dann bleibt nicht mehr viel übrig.

Delphi-Quellcode:
function StrExists(items: TStrings; s: string): Boolean;
begin
  Result := items.IndexOf(s) >= 0;
end;
Wenn du die Funktion benutzt, dann gibt es zwei Gründe es anders zu tun als du es zeigst: Zum einen ist IF FALSE einfach eleganter als IF FALSE = TRUE, zum anderen gibt es mehrere Möglichkeiten einen Speicherbereich als boolesche Variable zu interpretieren, was gelegentlich zu Überraschungen führen kann. In deinem Fall besteht keine Gefahr, aber besser du gewöhnst es dir garnicht erst so an. Dass du deine Daten in einer ListBox anzeigst, ist sicherlich okay. Speichern solltest du sie aber in einer nicht-visuellen Klasse - aber das hat Dani dir schon geschrieben.

Delphi-Quellcode:
begin
  Log(RequestedDocument);
  if StrExists(DocumentList, RequestedDocument) then
    RequestedDocument := 'index.html';
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 25. Jun 2008, 11:53
Mein problem bleibt jetzt bei der Funktion Log.
Das ist ein eigenes Formular und da habe ich ein Memo drin.
So sieht die Funktion aus:
Delphi-Quellcode:
procedure Log(s: string);
begin
  try
Form6.Memo1.Lines.Add(DateTimeToStr(Now)+' | '+s);
  except
  end;
end;
Wenn ich das Formular nicht vor dem ersten Log Eintrag öffne gibt es beim Schließen des Programms immernoch den Fehler.
Ich dachte immer die Formulare werden beim starten des Programms alle geladen.
Wie kann ich denn jetzt den Fehler beheben?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 25. Jun 2008, 12:01
Trenne Logik und Darstellung:
Delphi-Quellcode:
procedure Log(s: string, const sl: TStrings);
begin
  try
    sl.Add(DateTimeToStr(Now)+' | '+s);
  except
  end;
end;

procedure TForm6.Wuppdi;
begin
  Log('FooBar',Memo1.Lines);
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
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 25. Jun 2008, 12:10
Fehler bleibt der gleiche. Irgendwie muss das doch gehen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 25. Jun 2008, 12:19
Wo rufst Du Log denn auf?
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
Benutzerbild von sakura
sakura

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

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 25. Jun 2008, 12:27
In den Projektoptionen [STG]+[F11] kannst Du die automatisch zu ladenen Formulare bestimmen. Aber wozu machst Du Dir diesen Umweg überhaupt. Würde in oben genannten Beispiel nicht eine einfach Stringliste reichen?

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Komisches Verhalten beim Listbox durchsuchen

  Alt 25. Jun 2008, 13:09
mit deiner Listbox wird das nie richtig funktionieren. Das OnCommandGet des TIdHTTPServer wird eigentlich in einem extra thread ausgeführt. Entsprechend sollte man von da aus nicht auf VCL-Elemente zugreifen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:33 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