Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ListBox Namen hoch-und runterscrollen (https://www.delphipraxis.net/171577-listbox-namen-hoch-und-runterscrollen.html)

delphinee 13. Nov 2012 13:18


ListBox Namen hoch-und runterscrollen
 
Hallo, meine Aufgabe war es ein Programm zu erstellen, in welchem man Namen in die Listbox eintragen und beliebig hoch-bzw runterscrollen kann. Das hochscrollen und eintragen in die Liste habe ich schon bewältigt.. bei dem Rest bräuchte ich allerdings Hilfe! Hilfeee :O

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Original: array [0..9] of string;
  zaehler: integer;
 
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  If zaehler < 10 then
    begin
     ListBox1.Items[zaehler]:= Edit1.Text;
     zaehler := zaehler+1;
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var counter: integer;
    speicher: string ;
    i: integer;
 begin
  Speicher:= Listbox1.Items[0];


 For i:= 0 to 8 do
 ListBox1.Items[i]:=ListBox1.Items[i+1];


 ListBox1.Items[9]:=speicher;


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 zaehler:= 0;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var counter :integer;
begin

  Button2.Visible:= false;
  Button3.Visible:=false;
  Button4.Visible:=false;
 
  Edit1.SetFocus;

   If Edit1.Text = '' then
   begin
    Edit1.Visible:= false;
    Button1.Visible:=false;
    Button2.Visible:= true;
    Button3.Visible:=true;
    Button4.Visible:=true;


    end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var counter: integer;
    speicher: string ;
    i: integer;
begin




          ???






 end;

procedure TForm1.Button4Click(Sender: TObject);
begin




   ???







end;

end.

Perlsau 13. Nov 2012 14:02

AW: ListBox Namen hoch-und runterscrollen
 
Zitat:

Zitat von delphinee (Beitrag 1190977)
Hallo, meine Aufgabe war es ein Programm zu erstellen, in welchem man Namen in die Listbox eintragen und beliebig hoch-bzw runterscrollen kann. Das hochscrollen und eintragen in die Liste habe ich schon bewältigt.. bei dem Rest bräuchte ich allerdings Hilfe! Hilfeee :O

Ein paar Hinweise gefällig?

1. Benutze doch bitte die Delphi-Tags, wenn du Code ins Forum stellst (das Icon mit dem Delphi-Helm).

2. Verwende aussagekräftige Variablen-Bezeichner, so daß jeder, der deinen Code sieht, sofort weiß, was Button1 oder Button2 tun sollen.

3. Welcher Rest? Was ist dein Problem?

stahli 13. Nov 2012 14:09

AW: ListBox Namen hoch-und runterscrollen
 
Eine vorerst etwas unscharfe Anmerkung:

Schau Dir mal an
- ListBox.Items.Count
- ListBox.Items.Add
- ListBox.Items.Delete
genauer an.

Damit solltest Du schon weiter kommen...

PS. Herzlich willkommen noch!

delphinee 13. Nov 2012 14:22

AW: ListBox Namen hoch-und runterscrollen
 
Vielen Dank erstmal. Edit1 ist das Eingabefeld in welches man Namen einträgt, mit Button1 wird der Name per Klick in die Listbox eingetragen, Button2 ist für das verschieben der Namen nach oben und Button3 für das Verschieben der Namen nach unten.

Ich benötige Hilfe beim Programmieren von Button 3...

Perlsau 13. Nov 2012 14:50

AW: ListBox Namen hoch-und runterscrollen
 
Als erstes: Dort kannst du ein Einsteiger-Tutorial runterladen, das dir hilft, die ersten Schritte mit Delphi zu bewältigen.

Zitat:

Zitat von delphinee (Beitrag 1190987)
Vielen Dank erstmal. Edit1 ist das Eingabefeld in welches man Namen einträgt, mit Button1 wird der Name per Klick in die Listbox eingetragen, Button2 ist für das verschieben der Namen nach oben und Button3 für das Verschieben der Namen nach unten.

Dann benenne doch besser:
Edit1 ist Edit_Name
ListBox1 ist ListBox_Namen
Button1 ist But_NameEintragen
Button2 ist But_NachOben
Button2 ist But_NachUnten

Dann weißt du gleich, was dieser Button machen soll, wenn du deinen Code später mal wieder anschaust. Aber auch beim Orientieren im Quellcode ist es äußerst hilfreich, die eingesetzten Komponenten mit aussagekräftigen Bezeichnern zu versehen

Zitat:

Zitat von delphinee (Beitrag 1190987)
Ich benötige Hilfe beim Programmieren von Button 3...

Bevor ich dir weiterhelfe, sollten wir erstmal deinen bisherigen Code durchgehen:

Delphi-Quellcode:
procedure TForm1.But_NameEintragenClick(Sender: TObject);
begin
  If zaehler < 10 then
    begin
     ListBox1.Items[zaehler]:= Edit1.Text;
     zaehler := zaehler+1;
    end;
end;
Mit dieser Methode, Strings in eine Listbox einzufügen, hagelt es Fehlermeldungen, weil der Eintrag mit dem Index [zaehler] mit großer Sicherheit noch nicht existiert. Man fügt Items hinzu, indem man die Procedure Append oder die Function Add aufruft:

Delphi-Quellcode:
ListBox_Namen.Items.Append(Edit_Name.Text);
Mit Append wird einfach ein neuer Eintrag unten angehängt. Add liefert den Index des neuen Eintrags zurück. Count liefert die Anzahl aller Einträge. Hast du noch keine Einträge in der Listbox, gibt's eine Fehlermeldung, wenn du z.B. ListBox_Namen.Items[0] ansprechen willst. Um die Zählung der Einträge brauchst du dich nicht zu kümmern, das macht die Listbox automatisch.

Möchtest du die Bedingung umsetzen, daß Einträge in die Listbox nur möglich sind, solange die Anzahl der Einträge kleiner als 10 ist, schreibst du besser:

Delphi-Quellcode:
IF ListBox_Namen.Count < 10 THEN
BEGIN
...
END;
oder gleich am Anfang:

Delphi-Quellcode:
IF ListBox_Namen.Count > 9
THEN EXIT;
Damit verläßt du die Procedure, wenn die Anzahl der Einträge größer als 9 ist. Sinnvoll wäre hier auch sicher eine Message für den Anwender, damit er weiß daß und warum sein Eintrag nicht übernommen wurde:

Delphi-Quellcode:
IF ListBox_Namen.Count > 9 THEN
BEGIN
     ShowMessage('Nur 9 Einträge erlaubt!');
     EXIT;
END;

delphinee 13. Nov 2012 14:55

AW: ListBox Namen hoch-und runterscrollen
 
Danke !! Das Programm läuft ohne Fehlermeldungen.. aber dennoch danke für deine Hilfe!

Perlsau 13. Nov 2012 15:07

AW: ListBox Namen hoch-und runterscrollen
 
Zitat:

Zitat von delphinee (Beitrag 1190999)
Danke !! Das Programm läuft ohne Fehlermeldungen.. aber dennoch danke für deine Hilfe!

Das glaube ich dir nicht! Ich hab deinen Code eben 1:1 umgesetzt und das kommt dabei heraus, wenn ich Button2 drücke:

Code:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Delphinee.exe ist eine Exception der Klasse EStringListError mit der Meldung 'Listenindex überschreitet das Maximum (8)' aufgetreten.
---------------------------
Anhalten  Fortsetzen  Hilfe  
---------------------------
Ich mag es nicht, angelogen zu werden. Unter diesen Umständen bin ich nicht bereit, dir weiterhin behilflich zu sein. Vielleicht mag dir ja ein anderer helfen ...

delphinee 13. Nov 2012 15:12

AW: ListBox Namen hoch-und runterscrollen
 
mhm dann scheinst du irgend etwas falsch gemacht zu haben... bei mir läuft das Programm! Button2 funktioniert einwandfrei! Mein Sorgenkind ist Button3!

EWeiss 13. Nov 2012 15:14

AW: ListBox Namen hoch-und runterscrollen
 
Zitat:

Ich mag es nicht, angelogen zu werden. Unter diesen Umständen bin ich nicht bereit, dir weiterhin behilflich zu sein. Vielleicht mag dir ja ein anderer helfen ...
Immer diese überreaktionen.. Dann lass es doch einfach es zwingt dich niemand dazu.
Sorge einfach dafür das der "Maximale" Listenindex beim verschieben nicht überschritten wird.

gruss

delphinee 13. Nov 2012 15:20

AW: ListBox Namen hoch-und runterscrollen
 
Danke EWeiss! :))

Perlsau 13. Nov 2012 15:21

AW: ListBox Namen hoch-und runterscrollen
 
Zitat:

Zitat von EWeiss (Beitrag 1191007)
Zitat:

Ich mag es nicht, angelogen zu werden. Unter diesen Umständen bin ich nicht bereit, dir weiterhin behilflich zu sein. Vielleicht mag dir ja ein anderer helfen ...
Immer diese überreaktionen.. Dann lass es doch einfach es zwingt dich niemand dazu.
gruss

Selbstverständlich habe ich freiwillig zu helfen versucht und nicht gezwungenermaßen. Ich habe die Unit, die Delphinee gepostet hat, exakt kopiert, habe vier Buttons, eine Listbox und ein Editfeld auf der Form. Die Ereignisbehandlung von Button2, die angeblich funktioniert, habe ich eben aus "meinem" Code kopiert:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var counter: integer;
    speicher: string ;
    i: integer;
 begin
  Speicher:= Listbox1.Items[0];


 For i:= 0 to 8 do
 ListBox1.Items[i]:=ListBox1.Items[i+1];
 ListBox1.Items[9]:=speicher;
end;
Da wird ein Item mit dem Index 8 angesprochen, das zu diesem Zeitpunkt noch gar nicht existiert, wenn ich nicht vorher mindestens 9 Einträge in die Listbox eingegeben habe. Das kann nicht funktionieren! Wenn jemand was anderes behauptet, dann lügt er (oder sie). Und das mag ich nicht. Und ich nehme mir die Freiheit, das auch zu sagen, dieses Recht steht mir zu! Das ist noch lange keine Überreaktion! Und nun bin ich raus aus diesem Thread!

EWeiss 13. Nov 2012 15:28

AW: ListBox Namen hoch-und runterscrollen
 
Zitat:

Und ich nehme mir die Freiheit, das auch zu sagen, dieses Recht steht mir zu! Das ist noch lange keine Überreaktion! Und nun bin ich raus aus diesem Thread!
OT!

Das steht dir natürlich frei habe auch kein problem damit.
War auch nur eine spontane bemerkung von mir die jedem frei steht zu interpretieren wie er will.

Ich für meinen Teil bin da etwas ruhiger geworden und nehme solche dinge nicht so tierisch ernst.
Nichts für ungut.

gruss

stahli 13. Nov 2012 15:51

AW: ListBox Namen hoch-und runterscrollen
 
@Perlsau

Ich hatte auch einen längeren Beitrag fertig, aber Du warst schneller.
Da wir ähnliche Antworten hatten, habe ich mein Geschreibsel dann verworfen.

Ich hatte jedoch die Vermutung, dass der TE die Listbox schon im Designer gefüllt hatte. Dann hätte man schon mal andere Bedingungen als mit einer leeren Listbox.

Aber egal, wenn die Zielstellung jetzt erfüllt ist, dann passt das doch für´s erste.

Ist ja nicht einfach am Anfang (und später auch nicht :stupid:)...

p80286 13. Nov 2012 16:16

AW: ListBox Namen hoch-und runterscrollen
 
Kommen wir mal zum eigentlichen Thema zurück.
"Aufwärts" funktioniert. Für "Abwärts" fehlt Dir jede Idee?
Wo ist der Unterschied?

[OT]
Auch wenn aller Anfang schwer ist, diese Stolperstellen sollten, wenn man sie sieht benannt werden, nichts ist frustrierender als nach den ersten Erfolgserlebnissen vollkommen unvermutet vor die Wand zu laufen.
[/OT]

gruß
K-H

mkinzler 13. Nov 2012 18:07

AW: ListBox Namen hoch-und runterscrollen
 
Zitat:

Zitat von Perlsau (Beitrag 1191011)
Zitat:

Zitat von EWeiss (Beitrag 1191007)
Zitat:

Ich mag es nicht, angelogen zu werden. Unter diesen Umständen bin ich nicht bereit, dir weiterhin behilflich zu sein. Vielleicht mag dir ja ein anderer helfen ...
Immer diese überreaktionen.. Dann lass es doch einfach es zwingt dich niemand dazu.
gruss

Selbstverständlich habe ich freiwillig zu helfen versucht und nicht gezwungenermaßen. Ich habe die Unit, die Delphinee gepostet hat, exakt kopiert, habe vier Buttons, eine Listbox und ein Editfeld auf der Form. Die Ereignisbehandlung von Button2, die angeblich funktioniert, habe ich eben aus "meinem" Code kopiert:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var counter: integer;
    speicher: string ;
    i: integer;
 begin
  Speicher:= Listbox1.Items[0];


 For i:= 0 to 8 do
 ListBox1.Items[i]:=ListBox1.Items[i+1];
 ListBox1.Items[9]:=speicher;
end;
Da wird ein Item mit dem Index 8 angesprochen, das zu diesem Zeitpunkt noch gar nicht existiert, wenn ich nicht vorher mindestens 9 Einträge in die Listbox eingegeben habe. Das kann nicht funktionieren! Wenn jemand was anderes behauptet, dann lügt er (oder sie). Und das mag ich nicht. Und ich nehme mir die Freiheit, das auch zu sagen, dieses Recht steht mir zu! Das ist noch lange keine Überreaktion! Und nun bin ich raus aus diesem Thread!

Ich glaube nicht, dass er dich absichtlich angelogen hat! Es liegtgt eher an seiner mangelnden Erfahrung. Man sollte das m.E. einem Anfänger nachsehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 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