AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Function mehrmals ausführen (For each?)

Ein Thema von DarkItachi · begonnen am 12. Jan 2010 · letzter Beitrag vom 13. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#1

Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 20:52
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:
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;
Ok, dass ist ganz einfach gewesen für mich!

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:
if Listview1.SelCount> 1 then begin
  createform3:= Form3.Create(self);
Listview1.SelCount * createform3.Show;
for each...?
Wie kann ich denn jetzt für jedes item eine eigene Form öffnen? Mit eigener Caption?
Ich weiß das dieses Multiplikationszeichen nicht anwendbar ist, aber mir ist nicht anderes eingefallen?

Kann mir mal wieder jemand helfen?^^

MfG
Developer since age 14
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 20:54
Hallo

Delphi-Quellcode:
for i := 1 to Listview1.SelCount do
  Form3.Show;
Ist "SelCount" 0, wird die Schleife nicht durchlaufen.

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 20:57
Ungetestet:
Delphi-Quellcode:
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;
Musst du eventuell noch die Bugs rausmachen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 21:02
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.
  Mit Zitat antworten Zitat
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 21:03
ok danke...
dürfte schonmal funktionieren!
Werde beides schnell probieren! Thx Thx Thx Thx Thx
Developer since age 14
  Mit Zitat antworten Zitat
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 21:17
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:
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;
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...

Was ist denn jetzt schon wieder falsch?
Developer since age 14
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 21:20
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 21:27
Das Erstellen der Form war im ersten Beitrag besser, aber auch nicht so ganz richtig :
createform3:= TForm3.Create(self); // TForm3!
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Function mehrmals ausführen (For each?)

  Alt 12. Jan 2010, 21:58
Viele sagen: Probieren geht über studieren:

Delphi-Quellcode:
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;
Funktioniert fabelhaft! Danke!



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!^^
Developer since age 14
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: Function mehrmals ausführen (For each?)

  Alt 13. Jan 2010, 07:14
Zitat von DarkItachi:
Viele sagen: Probieren geht über studieren:

Delphi-Quellcode:
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;
Funktioniert fabelhaft! Danke!



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!^^
Also wenn ich das richtig sehe hast du an dieser Stellen ein riesen Memory-Leak!

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
Ralf Kaiser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:50 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