Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - ListBox durchsuchen und in andere ListBox kopieren


Dr.Miezo - Do 08.11.12 12:24
Titel: ListBox durchsuchen und in andere ListBox kopieren
Hallo!

Ich verwende erst seit kurzem Delphi und bin dadurch noch kein Genie was das Arbeiten damit angeht.
Mein Problem: Ich habe eine ListBox in der Zahlenkombinationen aufgelistet werden. Nun soll immer die erste Kombination genommen werden und die ListBox nach der nächsten Kombination durchsucht werden, welche dieser nicht gleich usw. (also nur kombinationen bei denen die zahlen immer verschieden sind) und in einer seperaten ListBox angezeigt werden.

Hier ein kleines Beispiel:
(es sind immer 6-stellige Zahlen und aufgeteilt in gerade und ungerade Zahlen(a= gerade, b= ungerade) und jede dieser 6 Stellen ist variabel)

A.B.A.B.A.B
1-> 2.1.4.3.6.5 (diese nehmen)
2-> 2.1.4.3.6.7
3-> 2.1.4.3.6.9
usw.
z.b. 89-> 4.3.6.5.8.7 (diese auch nehmen, da sie mit keiner Position mit der ersten übereinstimmt)
(die 3. Kombination darf dann werder der 1. noch der 2. gleichen)

Dies fortführen und die ListBox durchsuchen, bis keine Kombination mehr übrig ist.

Da meine Delphi Hilfe auf Deutsch und somit unverständlich und zum Teil unvollständig ist bin langsam echt am verzweifeln...

Hat ijmd eine Idee, Tips, Ratschläge, oder gar einen Lösungsvorschlag?

thx schonmal im voraus!!!


Nersgatt - Do 08.11.12 13:13

Hallo und Willkommen in der EE!

Ich hab Dein Problem nicht so wirklich verstanden. Geht es Dir nur draum, wie Du an die einzelnen Einträge der Listbox heran kommst? Das ginge z.B. so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  Item : String;
  i : Integer;
begin

  for I := 0 to ListBox1.Items.Count - 1 do
  begin
    Item := Listbox1.Items.Strings[i];
    ShowMessage(Item);
  end;

end;

Mit Item kannst Du dann Deine Vergleiche anstellen.


Dr.Miezo - Do 08.11.12 13:23

Vielen Dank ! :)

Nicht ganz....ich brauch eine function die mir eben die einzelnen Kombinationen herauspickt die sich eben in jeder zahl unterscheiden und da jeder durchlauf unterschiedlich ist (also jedes mal wenn die ListBox gefüllt wird) stehen manchmal mehrere tausend Kombinationen in der Box und manchmal nur wenige hunderte oder nur eine Hand voll....und damit man eben nicht mühsam die Liste durchgehen muss brauch ich etwas dass die Liste der reihe nach von Oben beginnend durchgeht und aufhört wenn es Unten angekommen ist. Die erste Kombination wird genommen und von dieser ausgehen sollen dann die anderen gesucht werden und damit die 2. ListBox gefüllt werden. (Ich hatte da an eine Art Schleife gedacht aber wie ist mir ein Rätsel und alles was ich versucht habe endete im Absturz)


Nersgatt - Do 08.11.12 13:24

Also wirklich verstanden hab ich es immer noch nicht.
Aber zeig am besten mal Deinen (fehlgeschlagenen) Versuch.


Dr.Miezo - Do 08.11.12 13:27

Oha^^

Diesen hab ich wieder entfernt (war ein totales Chaos) aber ich kann dir mal zeigen wie die Zahlenkombinationen erstellt werden.....vllt verstehst du dann wie ich das meine :D

Moderiert von user profile iconNarses: Beiträge zusammengefasst


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
procedure TForm1.Button1Click(Sender: TObject);
var
    P1: Integer;
    P2: Integer;
    P3: Integer;
    P4: Integer;
    P5: Integer;
    P6: Integer;
    Zaehler: Integer;
    Zaehler2: Integer;
    MaxWert1: Integer;
    MaxWert2: Integer;
    MaxWert3: Integer;
    MaxWert4: Integer;
    MaxWert5: Integer;
    MaxWert6: Integer;
    SinglePos: String;
    AsciiWert1: Integer;
    AsciiWert2: Integer;
    AsciiWert3: Integer;
    AsciiWert4: Integer;
    AsciiWert5: Integer;
    AsciiWert6: Integer;
begin
   // Codegenerator;
   Screen.Cursor := crhourglass;
   ListBox1.Clear;
   Label11.Caption := '';
   Label12.Caption := '';
   Zaehler := 0;
   Zaehler2 := 0;
   P1 := -2;
   P2 := -2;
   P3 := -2;
   P4 := -2;
   P5 := -2;
   P6 := -2;
   SinglePos := Copy(Variationsbereich,1,1);
   AsciiWert1 := Ord(SinglePos[1]);
   if ((AsciiWert1 >= 48 ) and (AsciiWert1 <= 57)) then
   begin
     P1 := StrToInt(SinglePos);
     MaxWert1 := P1 + 1 + StrToInt(Sprung);
   end;
   if SinglePos = 'A' then
     begin
       if StrToInt(UntererWert) = ConvertToGerade(StrToInt(UntererWert)) then
         P1 := StrToInt(UntererWert) - StrToInt(Sprung)
       else
         P1 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
     MaxWert1 := ConvertToGerade(StrToInt(ObererWert));
     end;
      if SinglePos = 'B' then
        begin
          if StrToInt(UntererWert) = ConvertToUngerade(StrToInt(UntererWert)) then
            P1 := StrToInt(UntererWert) - StrToInt(Sprung)
          else
            P1 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
        MaxWert1 := ConvertToUngerade(StrToInt(ObererWert));
        end;
   while P1 <= MaxWert1 - StrToInt(Sprung) do
     begin
       if ((SinglePos = 'A'or (SinglePos = 'B')) then
         P1 := P1 + StrToInt(Sprung)
       else
         MaxWert1 := MaxWert1 - 1;
         SinglePos := Copy(Variationsbereich,2,1);
         AsciiWert2 := Ord(SinglePos[1]);
       if ((AsciiWert2 >= 48 ) and (AsciiWert2 <= 57)) then
       begin
         P2 := StrToInt(SinglePos);
         MaxWert2 := P2 + 1;
       end;
       if SinglePos = 'A' then
         begin
           if StrToInt(UntererWert) = ConvertToGerade(StrToInt(UntererWert)) then
             P2 := StrToInt(UntererWert) - StrToInt(Sprung)
           else
             P2 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
         MaxWert2 := ConvertToGerade(StrToInt(ObererWert));
         end;
       if SinglePos = 'B' then
         begin
           if StrToInt(UntererWert) = ConvertToUngerade(StrToInt(UntererWert)) then
             P2 := StrToInt(UntererWert)-StrToInt(Sprung)
           else
             P2 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
           MaxWert2 := ConvertToUngerade(StrToInt(ObererWert));
         end;
       while P2 <= MaxWert2 - StrToInt(Sprung) do
         begin
           if ((SinglePos = 'A'or (SinglePos = 'B')) then
             P2 := P2+StrToInt(Sprung)
           else
             MaxWert2 := MaxWert2 - 1;
             SinglePos := Copy(Variationsbereich,3,1);
             AsciiWert3 := Ord(SinglePos[1]);
           if ((AsciiWert3 >= 48 ) and (AsciiWert3 <= 57)) then
           begin
             P3 := StrToInt(SinglePos);
             MaxWert3 := P3 + 1;
           end;
           if SinglePos = 'A' then
             begin
               if StrToInt(UntererWert) = ConvertToGerade(StrToInt(UntererWert)) then
                 P3 := StrToInt(UntererWert) - StrToInt(Sprung)
               else
                 P3 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
               MaxWert3 := ConvertToGerade(StrToInt(ObererWert));
             end;
           if SinglePos = 'B' then
             begin
               if StrToInt(UntererWert) = ConvertToUngerade(StrToInt(UntererWert)) then
                 P3 := StrToInt(UntererWert) - StrToInt(Sprung)
               else
                 P3 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
               MaxWert3 := ConvertToUngerade(StrToInt(ObererWert));
             end;
           while P3 <= MaxWert3 - StrToInt(Sprung) do
             begin
               if ((SinglePos = 'A'or (SinglePos = 'B')) then
               P3 := P3 + StrToInt(Sprung)
               else
               MaxWert3 := MaxWert3 - 1;
               SinglePos := Copy(Variationsbereich,4,1);
               AsciiWert4 := Ord(SinglePos[1]);
               if ((AsciiWert4 >= 48 ) and (AsciiWert4 <= 57)) then
               begin
                 P4 := StrToInt(SinglePos);
                 MaxWert4 := P4 + 1;
               end;
               if SinglePos = 'A' then
                 begin
                   if StrToInt(UntererWert) = ConvertToGerade(StrToInt(UntererWert)) then
                     P4 := StrToInt(UntererWert) - StrToInt(Sprung)
                   else
                     P4 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
                  MaxWert4 := ConvertToGerade(StrToInt(ObererWert));
                 end;
               if SinglePos = 'B' then
                 begin
                   if StrToInt(UntererWert) = ConvertToUngerade(StrToInt(UntererWert)) then
                     P4 := StrToInt(UntererWert) - StrToInt(Sprung)
                   else
                     P4 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
                   MaxWert4 := ConvertToUngerade(StrToInt(ObererWert));
                 end;
               while P4 <= MaxWert4 - StrToInt(Sprung) do
                 begin
                   if ((SinglePos = 'A'or (SinglePos = 'B')) then
                   P4 := P4 + StrToInt(Sprung)
                   else
                   MaxWert4 := MaxWert4 - 1;
                   SinglePos := Copy(Variationsbereich,5,1);
                   AsciiWert5 := Ord(SinglePos[1]);
                   if ((AsciiWert5 >= 48 ) and (AsciiWert5 <= 57)) then
                   begin
                     P5 := StrToInt(SinglePos);
                     MaxWert5 := P5 + 1;
                   end;
                   if SinglePos = 'A' then
                     begin
                       if StrToInt(UntererWert) = ConvertToGerade(StrToInt(UntererWert)) then
                       P5 := StrToInt(UntererWert) - StrToInt(Sprung)
                     else
                       P5 := StrToInt(UntererWert) + 1  - StrToInt(Sprung);
                     MaxWert5 := ConvertToGerade(StrToInt(ObererWert));
                     end;
                   if SinglePos = 'B' then
                     begin
                       if StrToInt(UntererWert) = ConvertToUngerade(StrToInt(UntererWert)) then
                         P5 := StrToInt(UntererWert) - StrToInt(Sprung)
                       else
                         P5 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
                       MaxWert5 := ConvertToUngerade(StrToInt(ObererWert));
                     end;
                   while P5 <= MaxWert5 - StrToInt(Sprung) do
                     begin
                       if ((SinglePos = 'A'or (SinglePos = 'B')) then
                       P5 := P5 + StrToInt(Sprung)
                       else
                         MaxWert5 := MaxWert5 - 1;
                       SinglePos := Copy(Variationsbereich,6,1);
                       AsciiWert6 := Ord(SinglePos[1]);
                       if ((AsciiWert6 >= 48 ) and (AsciiWert6 <= 57)) then
                       begin
                         P6 := StrToInt(SinglePos);
                         MaxWert6 := P6 + 1;
                       end;
                       if SinglePos = 'A' then
                         begin
                           if StrToInt(UntererWert) = ConvertToGerade(StrToInt(UntererWert)) then
                           P6 := StrToInt(UntererWert) - StrToInt(Sprung)
                         else
                           P6 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
                         MaxWert6 := ConvertToGerade(StrToInt(ObererWert));
                         end;
                       if SinglePos = 'B' then
                         begin
                           if StrToInt(UntererWert) = ConvertToUngerade(StrToInt(UntererWert)) then
                             P6 := StrToInt(UntererWert) - StrToInt(Sprung)
                           else
                             P6 := StrToInt(UntererWert) + 1 - StrToInt(Sprung);
                           MaxWert6 := ConvertToUngerade(StrToInt(ObererWert));
                         end;
                       while P6 <= MaxWert6 - StrToInt(Sprung) do
                         begin
                           if ((SinglePos = 'A'or (SinglePos = 'B')) then
                           P6 := P6 + StrToInt(Sprung)
                           else
                           MaxWert6 := MaxWert6 - 1;
                           if TestKombination (IntToStr(P1)+IntToStr(P2)+IntToStr(P3)+IntToStr(P4)+IntToStr(P5)+IntToStr(P6)) then
                             begin
                               Zaehler := Zaehler + 1;
                               MyStringList.Add(IntToStr(P1) + IntToStr(P2) + IntToStr(P3) + IntToStr(P4) + IntToStr(P5) + IntToStr(P6));
                               ListBox1.AddItem(IntToStr(P1) + IntToStr(P2) + IntToStr(P3) + IntToStr(P4) + IntToStr(P5) + IntToStr(P6),Form1);
                               Label11.Caption := IntToStr(Zaehler);
                             end
                             else
                             begin
                               Zaehler2 := Zaehler2 + 1;
                               Label12.Caption := IntToStr(Zaehler2);
                             end;
                         end;
                     end;
                 end;
             end;
         end;
     end;
     
Screen.Cursor := crdefault;
Variationsbereich := Copy(Variationsbereich,1,6);
MyStringList.SaveToFile(Pfad + Variationsbereich + '.txt');
end;

so sieht das dann aus....hoffe du kannst dir iwie ein Bild davon machen :D
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Nersgatt - Do 08.11.12 13:40

Ich glaub, wir müssen nochmal von vorne anfangen.
Was ich verstanden habe:
Du hast 2 Listboxen. Du möchtest nun einige Einträge aus der ersten Listbox in die zweite Listbox kopieren. Soweit richtig?
Was mir nun nicht klar ist, nach welcher Regel die Einträge kopiert werden sollten.


Dr.Miezo - Do 08.11.12 13:47

ok^^

Also die eine ListBox ist gefüllt mit Zahlenkombinationen (immer 6-stellig und immer verschieden)
und man nimmt jetzt die erste kombination die in der ersten ListBox steht (z.B. 432121) die merkt man sich und kopiert sie in die 2. ListBox jetzt geht man in der ersten ListBox weiter und sucht nach der Nächsten Kombination bei der alle Zahlen verschieden sind (in diesem Fall: 656543) diese merkt man sich nun auch, schreibt sie in die 2. ListBox und geht in der ersten List Box weiter und sucht nach der nächsten Kombination die weder der 1. noch der 2. Kombination gleicht (es dürfen gleiche zahlen vorkommen aber es geht um den Platz den sie einnehmen so darf hier in dem beispiel keine 4 mehr am anfang stehen usw...) und das wird so lange gemacht bis man nichts mehr findet und unten angekommen ist (es gibt keinen zweiten durchlauf)


hoffe des is deutlicher (habs beim ersten mal auch nicht kapiert als ich das machen sollte) ;)


Nersgatt - Do 08.11.12 13:55

Würdest Du nun in der ersten Listbox einen Eintrag mit 999599 finden, würdest Du den Eintrag NICHT übertragen, weil Du die 5 an der 4. Stelle schon mal hattest?


Dr.Miezo - Do 08.11.12 13:57

genau :)

nur Kombinationen an denen die Zahlen an anderen Stellen stehen als bei den Kombinationen zuvor und nichts darf sich gleichen


WasWeißDennIch - Do 08.11.12 14:03

Dazu würde ich mir als allererstes eine Hilfsfunktion zum Vergleich schreiben. Aus dem Kopf getippt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function StringsCompletelyDifferent(const s1, s2: string): Boolean;
var
  i: integer;
begin
  Assert(Length(s1) = Length(s2));
  Result := true;
  i := 1;
  while (i <= Length(s1)) and Result do
    begin
      if s1[i] = s2[i] then
        Result := false
      else
        inc(i);
    end;
end;


Nersgatt - Do 08.11.12 14:05

Damit hätten wir die erste große Hürde überwunden - ich hab die Problemstellung verstanden :D
Ich denke da mal ein bisschen drüber nach.

Im Prinzip läuft es ja so (Pseudocode):

Quelltext
1:
2:
3:
4:
5:
für jedes item in Listbox1
begin
  wenn SollItemEingefügtWerden(item) dann
    Item in Listbox2 einfügen
end


Damit haben wir das Problem schon mal etwas zerlegt. Wir brauchen jetzt nur noch eine Funktion, die prüft, ob das Item eingefügt werden muss.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
Funktion SollItemEingefügtWerden(AItem : String) : Boolean;
var
  i, j : integer;
  gefunden : boolean;
begin

  gefunden := false;
  i := 0;

  wiederhole solange (not gefunden) and (i <= Listbox2.Items.Count - 1)
  begin
    for j = 1 to 6
    begin
      wenn AItem[j] = Listbox2.Items.Strings[i][j]
        gefunden := true;

    end
    i := i + 1;
  end

  result := not gefunden;

end;


Dr.Miezo - Do 08.11.12 14:11

Gut..immerhin etwas :D

und ja genau so sollte des dann aussehen^^

wäre gut das so hinzubekommen :)




( Danke an : WasWeißDennIch )


Dr.Miezo - Do 08.11.12 14:59

kann ich das auch in nicht-Pseudocode haben? :D


Nersgatt - Do 08.11.12 15:01

user profile iconDr.Miezo hat folgendes geschrieben Zum zitierten Posting springen:
kann ich das auch in nicht-Pseudocode haben? :D

Nö, sorry. Der Pseudocode ist doch schon 90% der Lösung. Den Rest darfste schon selbst machen. Etwas Eigeninitiative musst Du schon zeigen. Wenn Du konkrete Fragen zur Syntax hast, kannst Du die ruhig stellen. Aber ich werde Dir nicht Deine Arbeit machen.


Dr.Miezo - Do 08.11.12 15:07

wiederhole solange....hab da while do genommen

und wie is des mit dem not gefunden gemeint? sollte des true sein?


Nersgatt - Do 08.11.12 15:10

Mit dem While liegst Du schon ganz richtig.
NOT ist die Negation.
Man könnte schreiben "wiederhole solange (gefunden = false)...". Das bewirkt in diesem Fall das Selbe. Aaaaaber, man sollte nicht auf "False" prüfen, sondern lieber den Konstrukt mit NOT nehmen. Auf die Gründe möchte ich nicht genauer eingehen, da ich glaub, es würde Dich im Moment noch überfordern (ist nicht böse gemeint).

Merk Dir erstmal einfach "if NOT blabla" ist die richtige Alternative zu "if blabla = false"


Dr.Miezo - Do 08.11.12 15:20

kein problem

der will bei mir des ListBox ned akzeptieren....
und an welcher Stelle soll ich dann die gefundenen Kombinationen in die ListBox schreiben?


Nersgatt - Do 08.11.12 15:22

Zeig mal bitte die Codestelle, die nicht funktioniert und welches Fehlermeldung es gibt.
Den Code bitte in Delphi-Tags verpacken, dann wird es im Forum richtig dargestellt.
Also so:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG9e0c1a0ed0a6d0fc1035e4fb303bd8d0}</span></span>                    


Dr.Miezo - Do 08.11.12 15:28


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 while (not gefunden) and (i <= ListBox1.Items.Count - 1do
(undeclared identifier 'ListBox1')
for p = 1 to 6;
(for loop control variable must  be simple local variable)
begin
(expression expected but begin found)
if AItem[p] = ListBox1.Items.Strings[i][p] then
(then expected but identifier items found)


Nersgatt - Do 08.11.12 15:31

user profile iconDr.Miezo hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
while (not gefunden) and (i <= ListBox1.Items.Count - 1do
  for p = 1 to 6;
(for loop control variable must  be simple local variable)
begin
(expression expected but begin found)
if AItem[p] = ListBox1.Items.Strings[i][p] then
(then expected but identifier items found)


- Deine Listbox sollte schon "Listbox1" heißen. Oder Du musst in den Code halt den entsprechenden Namen der Listbox schreiben.
- Die Variable "p" muss in der Procedure deklariert sein, wo Du sie verwendest.
- bei der FOR-Schleife gehört nach der 6 ein do (ohne ;) hin


Gerd Kayser - Do 08.11.12 15:34

Wenn ich die Aufgabenstellung richtig verstanden hab, dann enthält ListBox1 Kombinationen, die auch mehrfach vorkommen können. In die zweite Listbox sollen alle Kombinationen kopiert werden, ohne ihre ggf. vorhandenen Duplikate. Dann würde ich es so machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TMainform.Button1Click(Sender: TObject);
var
  Schleife : integer;
begin
  ListBox2.Clear;
  ListBox2.Sorted := true;
  ListBox2.Items := ListBox1.Items;
  for Schleife := ListBox2.Count - 2 downto 0 do
    if ListBox2.Items[Schleife + 1] = ListBox2.Items[Schleife] then
      ListBox2.Items.Delete(Schleife + 1);
end;


Dr.Miezo - Do 08.11.12 15:39

bis auf des do passt alles so...ich habs ja angepasst an meinen quelltext...

und wenn ich die function oben bei public so reinsetzte:


Delphi-Quelltext
1:
function Kombinationsauswahl(AItem: String) : Boolean;                    

dann kommt:
unsatisfied forward or external declaration 'TForm1.Kombinationsauswahl'


Nersgatt - Do 08.11.12 15:40

Unten im Quellcode muss dann stehen:

Delphi-Quelltext
1:
2:
3:
4:
function TForm1.Kombinationsauswahl(AItem: String) : Boolean;
begin
...
end;

Das TForm1 davor ist wichtig, damit klar ist, dass das zu der Klasse gehört. Dann wird auch die Listbox gefunden.


Dr.Miezo - Do 08.11.12 15:43

ok ich bin blöd

aber damit funzt der rest noch immer nicht....also mein 'p' will er nich und mit dem begin gehts ah noch ned...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function TForm1.Kombinationsauswahl(AItem: String) : Boolean;
var
  i : Integer;
  p : Integer;
  gefunden : Boolean;
begin
  gefunden := false;
  i := 0;

  while (not gefunden) and (i <= ListBox1.Items.Count - 1do
  begin
    for p = 1 to 6 do
    begin
      if AItem[p] = ListBox1.Items.Strings[i][p] then
      gefunden := true;
    end;
    i := i + 1;
  end;
  result := not gefunden;
end;


Nersgatt - Do 08.11.12 15:45


Delphi-Quelltext
1:
for p := 1 to 6 do                    

Da fehlt der Doppelpunkt.


Dr.Miezo - Do 08.11.12 15:50

ok jetzt wirds echt peinlich

das mit in die listbox schreiben hab ich in die letzte zeile gesetzt


Delphi-Quelltext
1:
ListBox2.AddItem(IntToStr(p));                    


etwa so aber iwie mach der des trotzdem nich...


Dr.Miezo - Do 08.11.12 16:02

passt schon jetzt gehts...

so nur noch eine kurze frage:
in dem langen quelltext den ich vorhin gepostet habe da sind einige andere functions und procedures eingebaut aber gibt es eine möglichkeit nun diese funktion einfach am anfang von button.click zu schreiben ohne diese in den quelltext einzubauen?
also dass die function eben auf 'knopfdruck' funktioniert?


platzwart - Do 08.11.12 16:11

Klar! Einfach auf den Button klicken, dann im Objektinspektor bei "OnClick" doppelklicken. Dann wird im Sourcecode eine neue Methode eingefügt und dort dann die Prozedur/Funktion deiner Wahl aufrufen.