AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Code wird nicht ausgeführt - warum? (erledigt, danke an Popov)
Thema durchsuchen
Ansicht
Themen-Optionen

Code wird nicht ausgeführt - warum? (erledigt, danke an Popov)

Ein Thema von d7user1 · begonnen am 19. Mär 2014 · letzter Beitrag vom 20. Mär 2014
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 20:30
Delphi-Quellcode:
procedure Test(Item: TListItem; i: Integer; Daten: TMeineDaten);
const
  Schwadawum: array[Boolean] of String = ('nicht gesetzt.', 'gesetzt');
begin
  //ShowMessage(Format('i ist: %d; Caption: %s', [i, Item.Caption]));

  //ShowMessage(Format('Daten aus Bagage: %s und %d', [Daten.Str, Daten.Int]));

  ShowMessage(Format('Die Checkbox ist %s', [Schwadawum[Item.Checked]]));
end;
EDIT:

Delphi-Quellcode:
   for j := 0 to ListView1.Items.Count - 1 do
    begin
     if (not ListView1.Items[j].Checked) and ItemGefunden(ListView1.Items[j], i) then
Warum gehst du alle Items durch. Du hast doch das eine Item, das du angeklickt hast, doch geschickt. Du mußt nur das abfragen.

Geändert von Popov (19. Mär 2014 um 20:32 Uhr)
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#2

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 20:34
es tut mir leid dass ich kein beispiel posten wollte und das was ich gepostet habe schwachsinn zu sein scheint.

ich werde mich mal einlesen ob bei OnMouseUp irgendwelchen speziellen messages gepostet werden und ob da was geblockt hat.

nur noch eine sache zur bagage:
die daten liegen in einer externen stringlist da ich diese stringlist noch an anderer stelle sehr häufig brauche.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 20:43
Doppelte Pflege ist niemals gut.

NACHTRAG:

OnMouseUp ist für das was du vorhast nicht das optimale Ereignis, es gibt bessere. GetItemAt bietet zwar die Möglichkeit, aber dafür ist es nicht gedacht. Wenn dir ein OnDblClick nicht passt, es gibt noch OnClick. Wie gesagt, das ListItem auf das du geklickt hast kannst du auch über Selected ermitteln, statt mit GetItemAt. Das eine sagt welches ListItem aktuell ausgewählt ist (bei MultiSelected = False, sonst ist es das Erste), das andere über welchem ListItem sich gerade die Maus befindet.

Guck dir mal die Ereignisse mal der Reihe mal durch.

Geändert von Popov (19. Mär 2014 um 21:07 Uhr)
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#4

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 20:57
Warum gehst du alle Items durch. Du hast doch das eine Item, das du angeklickt hast, doch geschickt. Du mußt nur das abfragen. diese for-schleife befindet sich in einem ButtonOnClick. ich frage ganz zum schluss ab welche items checked sind und welche nicht.

zur bagage nochmal:
kann es sein dass ich mir diese doppelte for-schleife zum finden eines items und dem passendem stringlist-eintrag mit dem bagage sparen kann da die daten direkt am item hängen?
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#5

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 22:17
ich melde mich noch ein letztes mal. die letzte stunde habe ich mir das mit dem bagage mal genauer angeguckt.

wenn ich vorher ein item angeklickt habe, habe ich mir das dazu passende item in der stringlist mit zwei verschachtelten for-schleifen gesucht.
bei wenigen dateien kein problem. aber dann habe ich es mit 13.000 probiert. rein rechnerich beenden sich die schleifen nicht für 13.000 * 13.000 duchläufe.

das war aber alles zu lange. ein durchlauf war noch nach 5 minuten nicht beendet.

jetzt gebe ich jedem listitem bei der erstellung (Items.Add) daten bei .Data mit auf dem weg.

suche ich nun den passenden eintrag in der stringlist sieht das so aus:

Delphi-Quellcode:
 with ListView1 do
  begin
for i := 0 to Items.Count - 1 do
    begin
     if not Items[i].Checked then
      begin
       IndexInSL := TMeineDaten(Items[i].Data).MeinIndex;
       WertInSL := WerteListe.Strings[IndexInSL];

       if WertInSL[1] = '_then
        WerteListe.Strings[IndexInSL] := Copy(WertInSL, 2, Length(WertInSL))
       else
        WerteListe.Strings[IndexInSL] := '_' + WertInSL;
      end;
    end;
end;
statt 13.000 * 13.000 durchläufen gibt es nun nur noch 13.000 und statt 5 minuten und mehr dauert das alles nur noch 400 millisekunden.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Code wird nicht ausgeführt - warum? (erledigt, danke an Popov)

  Alt 19. Mär 2014, 23:27
Welche Delphi-Version hast du?

EDIT:

if WertInSL[1] = '_then Was passiert eigentlich wenn der WertInSL leer ist? Kabum? Oder gibt es keine leeren Strings? Wie wäre es vorher zu prüfen ob die Länge größer 0 ist?

Geändert von Popov (19. Mär 2014 um 23:29 Uhr)
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#7

AW: Code wird nicht ausgeführt - warum? (erledigt, danke an Popov)

  Alt 19. Mär 2014, 23:29
ich hatte vorher delphi 7 und 2005 personal, habe danach turbo delphi getestet und bin am ende doch bei delphi 2005 personal geblieben.
  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 16:14 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