Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Verstehe die Zählschleifen und VCL-Komponenten nicht-Schule! (https://www.delphipraxis.net/83898-verstehe-die-zaehlschleifen-und-vcl-komponenten-nicht-schule.html)

aengstlichesReh 8. Jan 2007 09:29


Verstehe die Zählschleifen und VCL-Komponenten nicht-Schule!
 
Hallo.
Ich bin Schülerin einer neunten Klasse. Im Moment wird bei uns dieMenge eingeführt. Delphi habe ich seit der 8. Klasse. Verstanden hab ich es nie richtig, mein Gebiet ist ehr HTML. Nun haben wir wieder eine neue Aufgabe bekommen, und ich komme ienfach nicht weiter.
Also hab ich im Internet gesurft und bin auf dieses Forum gestoßen udn hoffe nun auf Hilfe.
Wir arbeiten mit Delphi 5.
Die Aufgabe ist, eine Lottofirma zu Grründen und dafür Checkboxen Dynamisch zu erstellen. Eine hab ich Hinbekommen, aber mehr geht nicht, ich verstähe die Zäjhlschleife nicht.
Es sollen Zufallszahlen gezogen werden und dann mizt den 4 Tips verglichen. Aber ich hab absolut keine Idee, wie ich das machen muss.
Ich hoffe, ich finde hier schnell Hilfe, da der Unterricht gleich weiter geht.

Liebe Grüße.

Reh

SirThornberry 8. Jan 2007 09:35

Re: Brauche Hilfe für die Schule
 
Hallo und Willkommen. Könntest du deinem Beitrag bitte einen Aussagekräftigen Titel geben so das jeder sofort weiß worum es geht?

DP-Maintenance 8. Jan 2007 09:36

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Datenbanken" nach "VCL / WinForms / Controls" verschoben.

DP-Maintenance 8. Jan 2007 09:36

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "VCL / WinForms / Controls" nach "Object-Pascal / Delphi-Language" verschoben.
Da wohl die Schleifen das Problem sind, schiebe ich das ganze mal in die Rubrik der Sprache ;)

aengstlichesReh 8. Jan 2007 09:37

Re: Brauche Hilfe für die Schule
 
kann ich das jetzt noch ändern?

SirThornberry 8. Jan 2007 09:37

Re: Brauche Hilfe für die Schule
 
Ja, einfach im ersten Beitrag über dem Beitrauf den "Edit"-Button anklicken. :-D

Luckie 8. Jan 2007 09:43

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Zeig uns doch mal, was du bisher hast, was nicht funktioniert und was du nicht verstehst.

Phoenix 8. Jan 2007 09:45

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Ich würde jede Wette eingehen, Du hast entgegen der Forenregeln noch nicht gesucht: Hier im Forum suchenControls dynamisch erstellen.
Da gibts schon zig Antworten zu.

aengstlichesReh 8. Jan 2007 09:45

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Ok. Hab ich. Aber mit meiner Aufgabe komm ich immernoch nicht weiter. Die Lehrer sind bestimmt langsam genervt, weil ich nie was kapiere ^^

Wir haben als wir mit Delphi angefangen haben, eine Kopie bekommen. Da steht zur Zählschleife folgendes:
Für i =aw BIS es SCHRITT s TUE Anweisung (aw = anfangswert; ew=endwert s= schritt) [in spalte verbal forumuliert]
[spalte programiersprache delphie steht]: FOR i := aw TO ew DO Anweisung oder Verbund;

Was ist i? Das versteh ich nie. Und anfangs und entwert soll in meinem fall wohl die verändedte position der vcl komponenten sein?

LG

Reh

aengstlichesReh 8. Jan 2007 09:47

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
phoenix: entschuldige, bin eben erst angemeldet ^^
kenn mich nicht so aus.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;

procedure TForm1.Button1Click(Sender: TObject);
var M:set of byte;
    a,b,c:Integer;
begin
M:=[1..40];
a:=random(41);
end;

procedure TForm1.Button2Click(Sender: TObject);
var n: Tcheckbox;
   
begin

   n:=TCheckbox.Create(Form1);
   n.parent:=Form1;
   n.left:=100;
   n.top:=100;
end;

end.
das steht in meim programm ^^
ich weiß.. ganz viel...

[edit=Phoenix][ Delphi ] - tags um den Code gesetzt. Bitte das nächste mal selber machen. Mfg, Phoenix[/edit]

Tormentor32 8. Jan 2007 09:48

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Mit der Zählschleife meinst du vermutlich die for Anweisung, und die Funktioniert so:

Du deklarierst ein Variable vom Typ integer, word oder byte, z.B.:
Delphi-Quellcode:
Var i: integer
Dann überlegst du dir, wie oft du eine bestimmte Anweisung oder mehrere wiederholen willst
nehmen wir mal an, du willst zehnmal ein Messagebox anzeigen, die jeweils um 1 weiterzählt,
dann müsstest du folgenden Code anwenden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  for i := 1 to 10 do
    showmessage(inttostr(i));
end;
Bedeutet:
Setze i auf eins, zeige i
wenn i kleiner oder gleich 10 ist,
dann zeige i und erhöhe danach
Wiederhole

Gruß Richard

Alle sind schneller als ich...

edit: klitzekleiner fehler

aengstlichesReh 8. Jan 2007 09:52

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
was ist ein messagebox?
Ich probiers mal. danke

aengstlichesReh 8. Jan 2007 09:53

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
wie überredet ich den, dass er die position der checkbuttons ändert?
irgendwas mit nem multiplikator und + hat mein lehrer gesagt *dumm kuck*

Phoenix 8. Jan 2007 09:55

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Also: Prinzipiell recht einfach.

Du musst die Controls halt in einer Schleife erstellen.

Will heissen (Achtung: Pseudocode)


Delphi-Quellcode:
var
  i:integer;
  boxen: array[0..anzahlboxen] of TCheckBox;
  positionoben: integer;
begin

  for i:=0 to (Anzahl der benötigten Checkboxen) -1 do
  begin
    boxen[i] := TCheckBox.Create(form1);
    boxen[i].Parent := form1;
    boxen[i].Top := positionoben;
    positionoben := positionsoben + 2 + boxen[i].height;
  end;
end;
Danach hast Du im Array alle boxen und die sind auch auf dem form. Wichtig ist natüprlich dass Du das array auf dem form deklarierst und nicht in der Methode, sonst hängen die Controls irgendwo im Speicher und Du kommst da so einfach nicht mehr dran.

aengstlichesReh 8. Jan 2007 10:00

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
aaaaaaalso
was sind controls? und was meinst du mit methode?
ich glaub, mit dem code kann ich was anfangen *rumprobieren geht*
Danke

Tormentor32 8. Jan 2007 10:02

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Eine Messagebox ist eine Meldung, die in einem kleinem Fenster mit OK button ausgegeben wird.

Zu deinem Problem mit den Checkboxen:

Du solltest am Besten ein Array deklarieren, in welchem du deine Checkboxen speicherst, zum Beispiel
Delphi-Quellcode:
type TCheckBoxArray = Array[0..39] of TCheckbox // oder wieviele du brauchst

{ ... }

var
  CheckBoxArray: TCheckBoxArray; // Eine Variable deines Arrays
Jetzt kannst mit der oben genannten Forschleife jede Checkbox erstellen und werte zuweisen
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
  for i := 0 to 39 do // oder deine Anzahl
    begin // hier ist die Verbundanweisung nötig, da du ja Mehrere Anweisungen innnerhalb der Schleife Machen willst
      CheckBoxArray[i] := TCheckbox.Create(Form1);
      CheckBoxArray[i].Parent := Form1;
      CheckboxArray[i].Height := WasAuchImmer;
      CheckBoxArray[i].Width := WasAuchImmer2;
      CheckboxArray[i].Top := i*(WasAuchImmer+1); // Dann sind alle Checkboxen untereinander
    end;
end;
Aber Vergiss nicht, die Checkboxen hinterher wider freizugeben mit
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i: integer;
begin
  For i := 0 to 39 do // oder deine Anzahl
    CheckBoxArray[i].free;
end;
Ich hoffe, das hilft

aengstlichesReh 8. Jan 2007 10:08

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
ich hab das jetzt so gemacht:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var n: array[0..49] of TCheckBox;
    i: integer;
    n.top: integer;
begin
for i:=0 to 49 - 1 do
 begin
   n[i]:=TCheckbox.Create(Form1);
   n[i].parent:=Form1;
   n[i].left:=100;
   n[i].top:=100;
   n[i].top:= n[i].top +2 + n[i].hight;
   n[i].left:= n[i].left +2 + n[i].left;
   end;
und bekomme ne Fehlermeldung, undefinierter bezeichner n.
dann arraytyp erforderlich
unit1 kann nicht compiliert werden

außerdem wollte ich nioch frage, warum das aerray sein muss. ich dachte das soll ne menge ein und arrey ist doch ein feld, oder täusce ich mioch da?

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

aengstlichesReh 8. Jan 2007 10:11

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
dort oben bei typ dürfen wir leider nichts schreiben ^^

aengstlichesReh 8. Jan 2007 10:14

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
was heißt das freigeben? davon hab ich noch nie gehört ^^ hat die wer gefangen? ;)

aengstlichesReh 8. Jan 2007 10:16

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
unterrichrt ist zuende. danke für die hilfe. habt schon ein stück geholfen *nächste woche wieder auftaucht* aber dann rtst nach 15 uhr ^^

DANKE

Tormentor32 8. Jan 2007 10:17

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var n: array[0..49] of TCheckBox;
i: integer;
n.top: integer; // Das kannst du nicht machen
begin
for i:=0 to 49 - 1 do // von 0 bis 49 heißt 50, die -1 ist überflüssig
begin
n[i]:=TCheckbox.Create(Form1);
n[i].parent:=Form1;
n[i].width := 90; // beispielwerte, ist aber nötig, sonst kann man die nicht sehen
n[i].height := 30;
n[i].left:=100; // übverflüssig s.u.
n[i].top:=100; // überflüssig, da du direkt danach den Wert neu setzt
n[i].top:= 102 + n[i].height*i; // sonst würde trotzdem jede Checkbox an der Gleichen stelle sein
n[i].left:= 102 + n[i].width*i;
n[i].show; // hatte ich vergessen, sorry
end;
sollte so klappen

Das mit dem freigeben musst du machen, weil du mit dem aufruf
Delphi-Quellcode:
n[i] := TCheckbox.Create;
Speicherplatz für die Checkbox reservierst. Wenn du diesen Speicherplatz beim Beenden des Programms nicht freigibst, dann kann er nicht mehr genutzt werden => Speicherleck

ps: Es gibt übrigens die Edit Funktion, es ist nicht nötig 3 Beiträge hintereinander zu schreiben...

QuickAndDirty 8. Jan 2007 10:34

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Also ,
eigentlich must du sie nicht freigeben weil die ja das Formular als Besitzer (Owner)
haben können....

Ehrlich gesagt glaube ich nicht das Du Delphi in einem Forum lernen kannst.
Es ist auch etwas mehr Engagement nötig um das zu lernen (Lese bitte (auch) ein Buch).

Jeder beantwortet Dir hier gerne deine Fragen.
Leider sind die meisten nicht daran interresiert jemandes Hausaufgaben zu machen,
auch wenn wir alle mal was abgeschrieben haben. (Die Perspektive ändert sich wenn man die Schule hinter sich hat... :P )


zu
Was sind...

Controls sind die Dinge die man auf ein Formular legt oder dort erzeugt.
Controls sind also alle visuellen Componenten deines Programms.

Wir nennen Sie so weil sie alle von eine Klasse namens TControl erben.

aengstlichesReh 15. Jan 2007 14:09

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Guten Tag :)

Hab heut ne andre Aufgabe bekommen, um meine Noten aufzubessern. Bin schon recht eit, abre was bedeutet die Fehlermeldung inkompatible Zypen integer und extendet? ansonsten scheint alles richtig zu sein.

LG

Engel

Tormentor32 15. Jan 2007 14:11

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Du vergleichst irgendwo in deinem Programm einen Zeiger mit einem Gleitkommawert, das geht nicht...

TStringlist 15. Jan 2007 14:44

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Tormentor32 meinte eher, dass du irgendwo in deinem Programm einen Ganzzahlwert (=integer-Typ) mit einem (Gleit-)Kommawert (=extended-Typ) vergleichst, was nicht geht. Zuvor solltest du also den Integer-Wert einfach mal mit 1.0 multiplizieren. Dadurch wird aus diesem nämlich auch ein Kommawert und die Sache müsste eigentlich klappen.

PS. Ansonsten: Bei neuen Fragen ruhig einen neuen Thread aufmachen.

Tormentor32 15. Jan 2007 14:46

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Zitat:

Zitat von Tormentor32
Du vergleichst irgendwo in deinem Programm einen Zeiger mit einem Gleitkommawert, das geht nicht...

Hä?? Wie komm ich denn auf Zeiger?

Zitat:

Zypen integer
Da hab ich wohl zu schnell gelesen... :oops:

MaBuSE 15. Jan 2007 14:47

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Zitat:

Zitat von Tormentor32
Du vergleichst irgendwo in deinem Programm einen Zeiger mit einem Gleitkommawert, das geht nicht...

Nein, Integer und Extendet bedeutet, dass sie Integer (Ganzzahlen) mit Extented (Kommazahlen) vergleicht / zuweist.

Das geht nicht.

Du must entweder
Deine Integer in Kommazahlen konvertieren
oder
Deine Kommazahlen in Integer konvertieren.


Mit Round(3.2) wandelst Du z.B. den Extented Wert (3.2) in einen Integer (2) um.
Dieser Vorgang wird auch Runden genannt. ;-)

Delphi-Quellcode:
// mach aus der Kommazahl e eine Ganzzahl i
i := Round(e);

MaBuSE 15. Jan 2007 14:48

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Sorry, ich war zu langsam :-(
(sollte da nicht ein roter Kasten/Hinweis kommen?)

Angel4585 15. Jan 2007 14:51

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Zitat:

Zitat von MaBuSE
Mit Round(3.2) wandelst Du z.B. den Extented Wert (3.2) in einen Integer (2) um.
Dieser Vorgang wird auch Runden genannt. ;-)

sollte da nicht Integer(3) rauskommen? :gruebel:

Tormentor32 15. Jan 2007 14:54

Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
 
Nein Jakommt nicht raus, grade ausprobiert...

edit: so doof muss man erstmal sein: Will ausprobieren, was bei round(2.2) rauskommt und schreibt hin: round(3.2) :wall:


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