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
Seite 2 von 3     12 3      
Popov
(Gast)

n/a Beiträge
 
#11

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 21:13
wie kann ich denn mit dem debuggen genau an dieser stelle anfangen?
Eie Möglichkeit: in der Funktion am Anfang ein Haltezeichen setzten und dann (oder schon vorher) im Menü Ansicht>Debug-Fenster>Lokale Variablen wählen und Programm starten. Du bekommst ein Fenster mit aktuellen lokalen Werten. Mit der Funktionstaste F7 kannst du dann Zeile für Zeile weiter gehen.

PS: wenn da steht "auf Daten können wegen der Optimierung nicht zugegriffen werden", dann ist die Variable entweder unwichtig und oder bereits wieder entfernt, aber auf jeden Fall wegoptimiert.

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

n/a Beiträge
 
#12

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 21:19
Zitat:
Wo wir dabei sind, warum über ListView1MouseUp() und ListView1.GetItemAt(X, Y) ?
das mache ich so weil ich in der listview auf eine CheckBox klicke und der code nur ausgeführt werden soll wenn ich diese eben klicke.

ich habe dein beispiel mit OnClick mal ausprobiert und es funktioniert. mein code macht nichts anderes aber es funktioniert nicht.

ich glaube das liegt daran dass ich mich im OnMouseUp-Event befinde. aber wenn ich tatsächlich auf OnClick umsteige, wie komme ich an den klick auf die checkbox dran?

---

ich habe das jetzt mal geändert:
es wird nicht mehr geprüft ob ich auf eine checkbox klicke und und und.
sobald ich das fenster mit der listview bestätige um den prozess danach zu starten rufe ich folgendes auf:
Delphi-Quellcode:
 for i := 0 to WerteListe.Count - 1 do
  begin
   for j := 0 to ListView1.Items.Count - 1 do
    begin
     if (not ListView1.Items[j].Checked) and ItemGefunden(ListView1.Items[j], i) then
      begin
       break;
      end;
    end;
  end;
selbst bei einer sortierten liste nach klick auf eine column wird so genau der string aus der stringlist entfernt welcher in der listview nicht checked ist.

aber warum das nicht in OnMouseUp nicht funktioniert sondern nur mit showmessage ist mir ein großes rätsel.

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

n/a Beiträge
 
#13

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 21: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 21:32 Uhr)
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#14

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 21: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
 
#15

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 21: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 22:07 Uhr)
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#16

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 21: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
 
#17

AW: Code wird nicht ausgeführt - warum?

  Alt 19. Mär 2014, 23: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
 
#18

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

  Alt 20. Mär 2014, 00: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 (20. Mär 2014 um 00:29 Uhr)
  Mit Zitat antworten Zitat
d7user1
(Gast)

n/a Beiträge
 
#19

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

  Alt 20. Mär 2014, 00: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
Popov
(Gast)

n/a Beiträge
 
#20

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

  Alt 20. Mär 2014, 00:32
Ich kenne mich mit 2005 nicht aus. Prüfe mal bitte ob TListView evtl. die Eigenschaft OwnsObjects hat und wenn ja, ob True oder False gesetzt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 01:30 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