![]() |
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 |
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
Dieses Thema wurde von "SirThornberry" von "Datenbanken" nach "VCL / WinForms / Controls" verschoben.
|
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 ;) |
Re: Brauche Hilfe für die Schule
kann ich das jetzt noch ändern?
|
Re: Brauche Hilfe für die Schule
Ja, einfach im ersten Beitrag über dem Beitrauf den "Edit"-Button anklicken. :-D
|
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.
|
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
Ich würde jede Wette eingehen, Du hast entgegen der Forenregeln noch nicht gesucht:
![]() Da gibts schon zig Antworten zu. |
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 |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
phoenix: entschuldige, bin eben erst angemeldet ^^
kenn mich nicht so aus.
Delphi-Quellcode:
das steht in meim programm ^^
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. ich weiß.. ganz viel... [edit=Phoenix][ Delphi ] - tags um den Code gesetzt. Bitte das nächste mal selber machen. Mfg, Phoenix[/edit] |
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:
Dann überlegst du dir, wie oft du eine bestimmte Anweisung oder mehrere wiederholen willst
Var i: integer
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:
Bedeutet:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i := 1 to 10 do showmessage(inttostr(i)); end; 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 |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
was ist ein messagebox?
Ich probiers mal. danke |
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* |
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:
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.
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; |
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 |
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:
Jetzt kannst mit der oben genannten Forschleife jede Checkbox erstellen und werte zuweisen
type TCheckBoxArray = Array[0..39] of TCheckbox // oder wieviele du brauchst
{ ... } var CheckBoxArray: TCheckBoxArray; // Eine Variable deines Arrays
Delphi-Quellcode:
Aber Vergiss nicht, die Checkboxen hinterher wider freizugeben mit
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;
Delphi-Quellcode:
Ich hoffe, das hilft
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; |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
ich hab das jetzt so gemacht:
Delphi-Quellcode:
und bekomme ne Fehlermeldung, undefinierter bezeichner n.
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; 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] |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
dort oben bei typ dürfen wir leider nichts schreiben ^^
|
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? ;)
|
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 |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
Delphi-Quellcode:
sollte so klappen
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; Das mit dem freigeben musst du machen, weil du mit dem aufruf
Delphi-Quellcode:
Speicherplatz für die Checkbox reservierst. Wenn du diesen Speicherplatz beim Beenden des Programms nicht freigibst, dann kann er nicht mehr genutzt werden => Speicherleck
n[i] := TCheckbox.Create;
ps: Es gibt übrigens die Edit Funktion, es ist nicht nötig 3 Beiträge hintereinander zu schreiben... |
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. |
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 |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
Du vergleichst irgendwo in deinem Programm einen Zeiger mit einem Gleitkommawert, das geht nicht...
|
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. |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
Zitat:
Zitat:
|
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
Zitat:
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); |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
Sorry, ich war zu langsam :-(
(sollte da nicht ein roter Kasten/Hinweis kommen?) |
Re: Verstehe die Zählschleifen und VCL-Komponenten nicht-Sch
Zitat:
|
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:30 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