![]() |
OnTime Exepction ?
Hallo alle,
also habe ne Bösses Problem ich habe ne OnTime und wenn das ausgeführt wird will ich in einen ListView was auslesen.
Delphi-Quellcode:
doch es gibt da immer eine Exepction :wall: !!!
ID := ListView1.Items[Pos].SubItems[14];
Mit ne Button --> ButtonClick geht diese Zeile warum aber im OnTime nicht ? :gruebel: |
Re: OnTime Exepction ?
welche exception?
was ist pos, wo und auf was wird das gesetzt? |
Re: OnTime Exepction ?
Also Pos ist ne Integer und beim aufruf der Funktion 0 also ich will damit den 1 Eintrag aus meinen ListView.
Die Exception "Zugrief auf Adressspeicher Sowieso blabla bla (eben eine Adresse)". Was man eben von Windows kennt. |
Re: OnTime Exepction ?
dann greifst du wohl auf eine postion zu, die nicht definiert ist, und deshalb gibts die AV
entweder ist Pos nicht innerhalb deiner Liste, oder der SubItem Index mit 14 ist zu hoch (zb. du hast keine 15 subelemente) aber ohne mehr code kann man natürlich nur munter drauf los raten |
Re: OnTime Exepction ?
Zitat:
|
Re: OnTime Exepction ?
Das war ne vergleich :wink: !
Soweit wie ich das gezählt habe sind das 15 :gruebel: .
Delphi-Quellcode:
var
tpcolumn: TListColumn; begin .... ListView1.RowSelect:= TRUE; ListView1.MultiSelect:= TRUE; ListView1.showcolumnheaders := TRUE; ListView1.ReadOnly := TRUE; ListView1.ViewStyle := vsReport; ListView1.IconOptions.Arrangement := iaTop; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := 'Haupt '; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '1'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '2'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '3'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '4'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '5'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '6'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '7'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '8'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '9'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '10'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '11'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '12'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '13'; tpcolumn.width := 40; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '14'; tpcolumn.width := 60; tpcolumn := ListView1.Columns.Add; tpcolumn.Caption := '15'; tpcolumn.width := 60; .... So und damit kein Fusch passiert kommt noch vor der abfrage
Delphi-Quellcode:
Und da ich den Eintrag sehe und er da vorbeikommt wundert mich das, das er da Abschmiert :gruebel: .
if ListView1.Items.Count = 0 then
begin ShowMessage('Bitte erstmal was in die Liste eintragen!'); Exit; end; |
Re: OnTime Exepction ?
Zitat:
|
Re: OnTime Exepction ?
dann zeig noch den code her, wo du das machst ID := ListView1.Items[Pos].SubItems[14]; (also das drüber)
[edit]bzw. kontrolliere, das pos auch wirklich im bereich ist |
Re: OnTime Exepction ?
Erstmal Windows ist doch immer Schuld :tongue: .
Ok hier so sieht das ganze aus.
Delphi-Quellcode:
:duck:
procedure TfrmBot.Timer1Timer(Sender: TObject);
var ID: String; Href: String; begin Timer1.Enabled := False; if LoginStatus then begin ID := ListView1.Items[Pos].SubItems[14]; Href := Form1.WebBrowser1.OleObject. Document.Frames.item('main'). Document.location.href; if Href <> 'http://www.google.de/search.php?id=' + ID + '&suche=place' then begin exit; end; Form1.WebBrowser1.OleObject.Document.Frames.item('main'). Document.Forms.item('units').Elements.item('x').value := ListView1.Items[Pos].Caption; Form1.WebBrowser1.OleObject.Document.Frames.item('main'). Document.Forms.item('units').Elements.item('y').value := ListView1.Items[Pos].SubItems[0]; end; end; |
Re: OnTime Exepction ?
und WO wird pos auf einen wert gesetzt?
|
Re: OnTime Exepction ?
Hallo,
pos ist bei Dir eine globale Variable? Wo setzt Du diese?
Delphi-Quellcode:
Grüße
if LoginStatus then
begin if pos >= 0 and pos <= ListView.Items.count -1 then // <- neu begin ID := ListView1.Items[Pos].SubItems[14]; Href := Form1.WebBrowser1.OleObject. .... Klaus |
Re: OnTime Exepction ?
Also das sind 3 Sachen:
1: Ich drücke den Button
Delphi-Quellcode:
So das "Form1.WebBrowser1.Navigate(http://www.google.de/search.php?id=' +
procedure TfrmBot.Button2Click(Sender: TObject);
var ID: String; begin [u]Pos := 0;[/u] if ListView1.Items.Count = 0 then begin ShowMessage('Bitte erstmal was in die Liste eintragen!'); Exit; end; ID := ListView1.Items[Pos].SubItems[14]; Form1.WebBrowser1.Navigate(http://www.google.de/search.php?id=' + ID + '&suche=place'); end; ID + '&suche=place');" ruft eine Seite auf. 2: Nun warte ich bis die Seite Fertig ist.
Delphi-Quellcode:
Mit "Timer1.Enabled := True;" Schalte ich es an (Da noch Frames mit geladen werden Warte ich 3 Sekunden).
procedure TfrmBot.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant); begin Form1.Edit1.Text := URL; Form1.StatusBar1.SimpleText := URL+' erfolgreich geladen'; Timer1.Enabled := True; end; 3: Siehe oben das OnTime. |
Re: OnTime Exepction ?
ok, und wo trägst du das element in die liste ein?
ich glaube es reicht nicht aus, das du die 15 spalten anlegst, du mußt diese auch bei jedem Element befüllen. |
Re: OnTime Exepction ?
Also so langsam haben wir fast den ganzen Quellcode :zwinker: .
Delphi-Quellcode:
Ich muss dazu noch sagen das dieser Effekt nur im OnTime oder im WebBrowser1DocumentComplete, so wie ich das jetzt festgestellt habe.
procedure TfrmBot.btAddClick(Sender: TObject);
var ListItem: TListItem; begin ListItem := ListView1.Items.Add; ListItem.Caption := edR.Text; ListItem.SubItems.Add(ed1.Text); ListItem.SubItems.Add(ed2.Text); ListItem.SubItems.Add(ed3.Text); ListItem.SubItems.Add(ed4.Text); ListItem.SubItems.Add(ed5.Text); ListItem.SubItems.Add(ed6.Text); ListItem.SubItems.Add(ed7.Text); ListItem.SubItems.Add(ed8.Text); ListItem.SubItems.Add(ed9.Text); ListItem.SubItems.Add(ed10.Text); ListItem.SubItems.Add(ed11.Text); ListItem.SubItems.Add(ed12.Text); ListItem.SubItems.Add(ed13.Text); ListItem.SubItems.Add(ed14.Text); ListItem.SubItems.Add(ed15.Text); end; |
Re: OnTime Exepction ?
ich vermute mal, du überschreibst dir noch irgendwo die pos, kann es sein, das du pos noch in einem andrem stückchen code verwendest?
(und ich würde auch einen anderen variablen namen verwenden, pos ist immerhin eine delphi funktion) |
Re: OnTime Exepction ?
Der Variablenname pos ist sowieso ungünstig, da es eine gleichnamige Funktion in der Unit SysUtils gibt.
|
Re: OnTime Exepction ?
Später wollte ich es noch hochzählen. Habe die Variabel mal unbenannt in lePos. Aber immer noch der Fehler.
|
Re: OnTime Exepction ?
bist du 100% sicher, das du diese variable sonst niergends veränderst?
Kontrolliere es nochmal mit dem Debugger, das lePos sicher auf 0 steht, wenn der Timer augelöst wird. ansonsten poste einfach mal den gesamten code, der fehler müsste in einem noch nicht geposteten stückchen code liegen. |
Re: OnTime Exepction ?
Habe das hier gepostet da ich beim Debugen nichts gefunden habe. Der wert ist 0 wenn ich an die Stelle komme.
Und wenn ich
Delphi-Quellcode:
das mache schmiert er auch ab. Kann es sein das ich keinen zugrief auf ListView habe ?
ListView1.Items[0].SubItems[14];
|
Re: OnTime Exepction ?
dann gib dir einfach mal die zwei werte manuell aus ... (kurz vor der zeile wo er die AV reißt)
Delphi-Quellcode:
ShowMessage('Items.Count : '+IntToStr(ListView1.Items.Count));
ShowMessage('SubItems.Count : 'IntToStr(ListView1.Items[0].SubItems.Count)); |
Re: OnTime Exepction ?
Das erste ist 0, wie kann das sein ? wenn ich auf den Button drücke ist es 1 ! Was geht da ab ?
|
Re: OnTime Exepction ?
entweder löscht du dir irgendwo die listview
oder du hast eventuell 2 mal eine lsitview? erzeugst du die listview im code? und hast noch mal eine am formular drauf? aber wie gesagt, ohne source kann man lustig drauf los raten ... ist wie bei lotto spielen |
Re: OnTime Exepction ?
Wann wird denn "btAddClick" aufgerufen???
So wie es aussieht muß doch erstmal dieses Ereignis ausgeführt werden, damit irgendwelche Daten in Deinem Listview erscheinen. :gruebel: Und nun bin ich mir nicht sicher: Ist der Inhalt des Listview überhaupt noch gültig nachdem die Routine "btAddClick" verlassen wurde (TListItem ist doch dort lokal, oder?) ? :gruebel: |
Re: OnTime Exepction ?
Zitat:
und ich glaub ohne den Click auf btAdd, kann er auch der Timer nicht aufgerufen werden ... aber ist etwas undurchsichtig bis jetzt |
Re: OnTime Exepction ?
Das ListView habe ich auf das Formular gezogen also ein ganz normales.
Und das mit dem Timer ist richtig 100 Punkte. Was soll ich den alles Posten damit du es nachvollziehen kannst ? |
Re: OnTime Exepction ?
kannst mal alles posten? ansonsten häng mal die pas hier dran ...
|
Re: OnTime Exepction ?
Verdammt ich habs gefunden ! "Gruber_Hans_12345" mein Freunddu hattest recht mit deiner Theorier, das es das Listview 2 mal gibt.
Delphi-Quellcode:
Das ist von Delphi.
begin
Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TfrmWorker, frmWorker); <--- Application.Run; end.
Delphi-Quellcode:
Und Das von mir.
procedure TForm1.FormCreate(Sender: TObject);
begin WebBrowser1.Navigate('www.google.de'); frmWorker := TfrmWorker.Create(nil); frmWorker.Show; end; procedure TForm1.FormDestroy(Sender: TObject); begin frmWorker.Close; end; Mit anderen Worten das Formular gibt es 2 mal und also auch das ListView. Daraus entstand der Speichermatsch so das ich mal in den einen und mal in den anderen war. Danke Leute für die Hilfe. :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz