![]() |
Function mehrmals ausführen (For each?)
Hallöchen!
Ich mache es kurz: Ich habe eine Listview mit mehreren Items drin.. Wenn ein Item ausgewählt ist, dann öffnet sich auch nur ein Fenster..
Delphi-Quellcode:
Ok, dass ist ganz einfach gewesen für mich!
Form3.Create(self);
var createform3 : TForm3; begin if listview1.SelCount= 1 then begin createform3:= Form3.Create(self); createform3.Show; createform3.Caption:= listview1.Selected.SubItems.Strings[1]; end; Jetzt habe ich eingestellt, dass man mehrere Items in Listview auswählen kann. Wenn man jetzt auf 'preview' drückt, dann soll auch für jedes ausgewähltes Item ein Fenster öffnen! Ich habe das zuerst so versucht:
Delphi-Quellcode:
Wie kann ich denn jetzt für jedes item eine eigene Form öffnen? Mit eigener Caption?
if Listview1.SelCount> 1 then begin
createform3:= Form3.Create(self); Listview1.SelCount * createform3.Show; for each...? Ich weiß das dieses Multiplikationszeichen nicht anwendbar ist, aber mir ist nicht anderes eingefallen? Kann mir mal wieder jemand helfen?^^ MfG |
Re: Function mehrmals ausführen (For each?)
Hallo
Delphi-Quellcode:
Ist "SelCount" 0, wird die Schleife nicht durchlaufen.
for i := 1 to Listview1.SelCount do
Form3.Show; Grüße, Matze |
Re: Function mehrmals ausführen (For each?)
Ungetestet:
Delphi-Quellcode:
Musst du eventuell noch die Bugs rausmachen.
if Listview1.SelCount> 1 then
begin for i := 0 to listview1.Items.Count - 1 do begin if listview1.Selected[i] do begin Form3.Create(self); Form3.Show; Form3.Caption:= listview1.Selected.SubItems.Strings[i]; end; end; end; |
Re: Function mehrmals ausführen (For each?)
Vor Julians Edit sah der 2. Code etwas anders aus. Daher habe ich so eine "Kurzlösung" geschrieben. *g*
Die von Luckie geht eher in deine Richtung. |
Re: Function mehrmals ausführen (For each?)
ok danke...
dürfte schonmal funktionieren! Werde beides schnell probieren! Thx Thx Thx Thx Thx |
Re: Function mehrmals ausführen (For each?)
Ok danke Matze, das mit dem 2 Code wollte ich überssichtlicher machen!
Dein Code war schon voll genug! Ich habe etwas rumgebastelt und meiner sah fast schon so aus wie der von Luckie! Aber warum will mein Delphi das nicht annehmen?
Delphi-Quellcode:
Bei diesen Code Zeile 5 sagt er: Do gefunden, aber then erwartet. Wenn ich ein then einbaue, dann muss der listview1.Selected[i] noch einen Boolean Ausdruck besitzen, also := true und so...
if Listview1.SelCount> 1 then
begin for i := 0 to listview1.Items.Count - 1 do begin if listview1.Selected[i] do begin Form3.Create(self); Form3.Show; Form3.Caption:= listview1.Selected.SubItems.Strings[i]; end; end; end; Was ist denn jetzt schon wieder falsch? |
Re: Function mehrmals ausführen (For each?)
Na da fehlt ein then. Und wie gesagt, der Code war so aus der Hüfte geschossen. Du musst mal gucken, was man an der Stelle für eine Eigenschaft nehmen muss. Ich habe die Eigenschaften eines Listviews nicht mehr so im Kopf.
|
Re: Function mehrmals ausführen (For each?)
Das Erstellen der Form war im ersten Beitrag besser, aber auch nicht so ganz richtig ;) :
Delphi-Quellcode:
createform3:= TForm3.Create(self); // TForm3!
|
Re: Function mehrmals ausführen (For each?)
Viele sagen: Probieren geht über studieren:
Delphi-Quellcode:
Funktioniert fabelhaft! Danke!
if Listview1.SelCount> 1 then
begin for i := 0 to listview1.Items.Count - 1 do begin createform3:= tform3.create(self); if listview1.Items[i].Selected then begin createform3.Show; createform3.Caption:= listview1.Items[i].SubItems[1] end; end; end; Edit: Luckie... Ich finde es voll Wahnsinn wie man aus dem Kopf so ein Code zaubert... Wenn man sowas kann, dann ist man schon gut!^^ |
Re: Function mehrmals ausführen (For each?)
Zitat:
Dein "TForm3" wird x-mal (x=SelCount) erzeugt und immer der selben Variablen zugewiesen. Daher hast du hinterher keine Möglichkeit mehr die vorher erzeugten Instanzen wieder freizuggeben (die Variable "createform3" wird ja bei jedem Schleifendurchlauf überschrieben) oder überhaupt auf die erzeugten Instanzen zuzugreifen (ausser auf die die als letztes erzeugt wurde) Besser ist es, wenn du diese Formularzeiger in einer Objektlist oder meinestwegen auch in einem Array speicherst. [EDIT:] Eine andere Möglichkeit gäbe es noch: Erzeuge in deinem "TForm3" ein OnClose-Event und setze dort die CloseAction auf "caFree". So werden die Instanzen wenigstens freigegeben wenn der Benutzer sie schliesst. Ein Zugriff auf die anderen Instanzen, bis auf die zuletzt erzeugte, wäre allerdings wirklich nur durch Speicherung der Formzeiger in einer Liste oder einem Array möglich. Ciao, Ralf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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