| Autor |
Nachricht |
delphianer5
       
Beiträge: 16 Dabei seit: 06.03.2010
|
Hi,
ich lerne delphi in der Schule und habe Probleme bei einem Projekt.Bei dem Projekt geht es dadrum das man Bilder mittels eines Timers auf dem Bildschirm wandern lässt.Erstmals noch eine allgemeine Frage:
Ich will das wenn das Bild oben auf dem Fenster herauswandert unten wieder herauskommt.Ich will das mit einer if-Anweisung lösen, also if Bild.Left>form1."...".
Das Problem ist das ich nicht weiß was ich bei form1."..." hinschreiben soll.Wenn es rechts rauswandert heißt ja width nur wie wenns oben rauswandert?
Problem 2 und das ist das größere Problem.
Ich hab das Projekt geschrieben und es funktioniert teilweise.Die Bilder wandern so wie ich will nur sie fangen direkt an zu wandern,wenn die exe geöffnet wird,das sollen sie aber nicht.Habe dan Tex auf Buttons programmiert und sie sollten erst bei klick ausgelöst werden tun sie aber nicht.
Könnt ihr mir helfen?
Quellcode:
mfg delphianer5
Moderiert von Gausi: Delphi-Tags hinzugefügt
Moderiert von Narses: Topic aus Algorithmen, Optimierung und Assembler verschoben am So 07.03.2010 um 17:35
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von delphianer5 am So 07.03.10 23:20, insgesamt 1-mal bearbeitet
|

|
|
Hidden
        

Beiträge: 1895 Erhaltene Danke: 9 Dabei seit: 07.01.2008
Win7(Home)x64, FF 3.6.8 Delphi 2010 Professional
|
Hi
delphianer5 hat folgendes geschrieben : | Ich will das wenn das Bild oben auf dem Fenster herauswandert unten wieder herauskommt.Ich will das mit einer if-Anweisung lösen, also if Bild.Left>form1."...".
Das Problem ist das ich nicht weiß was ich bei form1."..." hinschreiben soll.Wenn es rechts rauswandert heißt ja width nur wie wenns oben rauswandert? |
Die Integervariablen in einem TRect(Rechteck) heißten Left, Top, RIght und Bottom; bzw. statt Right und Bottom manchmal auch Width und Height. Das Konzept taucht häufiger auf =)
delphianer5 hat folgendes geschrieben : | Problem 2 und das ist das größere Problem.
Ich hab das Projekt geschrieben und es funktioniert teilweise.Die Bilder wandern so wie ich will nur sie fangen direkt an zu wandern,wenn die exe geöffnet wird,das sollen sie aber nicht.Habe dan Tex auf Buttons programmiert und sie sollten erst bei klick ausgelöst werden tun sie aber nicht. |
Kein Problem, stelle einfach im Object Inspector des Timers auf dem Formular die Eigenschaft Enabled auf false. (Der Object Inspector ist die Leiste auf der linken Seite in der Grafikansicht(<>Quelltextansicht), wo du die Eigenschaften der festen Formularkomponenten einstellst).
Wenn du den Timer dann starten willst, geht das per TimerName.Enabled := true;.
lg,
_________________ Even the word doctor is false. Your real name is Hidden. :O
|

|
|
Stundenplan
        
Beiträge: 56 Dabei seit: 09.02.2009 Wohnort: in der Nähe von Stuttgart
Win 7 Delphi 7 Pers.
|
Hallo!
Bitte erstelle für jede Frage einen eigenen Thread - das macht dieses Foum hier wesentlich übersichtlicher!
Vermeide außerdem Vergleiche mit True/False; warum das so ist, wird hier erklärt: www.delphi-treff.de/...g-mit-boolean-werten
|

|
|
Hidden
        

Beiträge: 1895 Erhaltene Danke: 9 Dabei seit: 07.01.2008
Win7(Home)x64, FF 3.6.8 Delphi 2010 Professional
|
Stimmt, das hatte ich gar nicht gemerkt.
Ein weiterer Tipp wäre, dass du nicht so streng nach jedem Schlüsselwort Umbrechen und Einrücken musst(letzteres quasi nur, wenn der folgende Codeteil in Abhängigkeit vom Ersten eventuell nicht ausgeführt wird, oder ein sogenannter Block(begin..end) ist. So einer muss aber nur folgen, wenn er auch mehrere Anweisungen zusammenfasst, also z.B. bei deinen ifs unten nicht). Eine übersichtlichere Variante könnte dann so aussehen:
PS: Wenn die Zusammenfassung Timer2.Enabled := not Timer2.Enabled; nicht so einfach zu verstehen ist, einfach nochmal nachfragen!
lg,
_________________ Even the word doctor is false. Your real name is Hidden. :O
|

|
|
ffgorcky
       
Beiträge: 571 Dabei seit: 17.09.2008 Wohnort: Schleswig-Holstein, nahe Bad Bramstedt
WIN XP/2000&7Prof (Familie:Win 95,Win 98)
|
Entschuldigung, dieser Teil kann doch so gar nicht ausgeführt werden, wenn der Timer gar nicht an ist und die Procedure nur von diesem aufgerufen wird - und ich habe nirgendwo gesehen, dass sie extra mit Timer2.OnTimer aufgerufen wird (oder habe ich das nur übersehen?):
(in TForm1.Timer2Timer(Sender: TObject);):
|

|
|
Narses
        

Beiträge: 7322 Erhaltene Danke: 7 Dabei seit: 25.07.2004 Wohnort: Gelsenkirchen
W2k, WXPpro D6pe, D7pro
|
Moin!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
| 1.2 Beiträge: | | Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf  oder  klicken und den Titel ändern. Danke Dir!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|

|
|
delphianer5
       
(Threadstarter)
Beiträge: 16 Dabei seit: 06.03.2010
|
Danke für die schnelle und ausführliche Beantwortung meiner Fragen.
@Hidden:Danke.Ja jetzt wo du es sagst,hätte ich von alleine drauf kommen können^^.
Ich hab nur ein weiteres Problem.Das Bild wandert heraus aber es erscheint nicht unten.Wo ist der Fehler?
Ach ja stimmt,die Timer werden ja standardmäßig auf true gestellt,Danke für den Hinweis!
Ich werde in Zukunft nicht mehr so streng einrücken,danke für den Tipp!
@Stundenplan:Ja ich wollte an meinem ersten Tag im Forum nicht gleich mit 2 Threads das ganze Forum zu spammen,noch dazu das es ja eig. sich alles auf das selbe Thema bezieht.
Ich habs mir durchgelesen,danke an alle für die Tipps wie ich meinen ich nenns mal "Schreibstil" verbessern kann,lerne Info erst seit dem Sommer 2 Stunden pro Woche und bin sehr dankbar für solche wertvollen Tipps.
@ffgorcky:
Doch, der Teil wird ausgeführt und funktioniert so wie ich es möchte oder habe ich dich falsch verstanden?
@Narses:
Ja ok,ist nicht das erste Forum das ich nutze nur wie so oft findet man nicht eine gute Überschrift,da ich das Thema nicht so gut differenzieren konnte.Außerdem wollte ich wohl eher unbewusst mit einem allgemeinem Betreff möglichst viele Leute hier ansprechen die mir dann helfen.
Moderiert von Narses: Delphi-Tags hinzugefügt
|

|
|
Hidden
        

Beiträge: 1895 Erhaltene Danke: 9 Dabei seit: 07.01.2008
Win7(Home)x64, FF 3.6.8 Delphi 2010 Professional
|
delphianer5 hat folgendes geschrieben : | @Hidden:Danke.Ja jetzt wo du es sagst,hätte ich von alleine drauf kommen können^^.
Ich hab nur ein weiteres Problem.Das Bild wandert heraus aber es erscheint nicht unten.Wo ist der Fehler?
|
Du verschiebst das Bild um ein Pixel zurück, wenn es schon raus ist. dann ist es wieder drin, wandert beim nächsten TImer also wieder raus, dann wider ein Pixel rein.. Setze mal .Top auf 0, wenn das Bild raus ist.
Eine andere Möglichkeit ist, dass du das Bild um einen Betrag aus einer Variable multiplizierst, und diese dann negierst, sodass der Hummer sich in die andere Richtung bewegt(Hummer.Top := Hummer.Top + HummerTempo; if Hummer.Top > Form1. Height then HummerTempo := -Hummertempo;).
delphianer5 hat folgendes geschrieben : | | Ich werde in Zukunft nicht mehr so streng einrücken,danke für den Tipp! |
Tja, streng einrücken(dich also an die "Regeln" halten), solltest du schon weiter, das war vielleicht ein bisschen unglücklich formuliert.  Nur die Regelformulierung, wann also eingerückt werden sollte, kannst du verbessern. Wie, habe ich oben beschrieben.
(Wenn du es nicht streng, das heißt inkonsistent machst, ist das für manche Lehrer glaube ich Benotungskriterium). So, wie ich es vorgeschlagen habe, passt es glaube ich zum offiziellen Styleguide, da kann man dann nichts für abziehen.
delphianer5 hat folgendes geschrieben : | | @Stundenplan:Ja ich wollte an meinem ersten Tag im Forum nicht gleich mit 2 Threads das ganze Forum zu spammen,noch dazu das es ja eig. sich alles auf das selbe Thema bezieht. |
Joar, wir wollen hier aber ruhig mehrere Threads. Trennbare Fragen sollten auch getrennt werden, so als Maßregel.
delphianer5 hat folgendes geschrieben : | | Ich habs mir durchgelesen,danke an alle für die Tipps wie ich meinen ich nenns mal "Schreibstil" verbessern kann,lerne Info erst seit dem Sommer 2 Stunden pro Woche und bin sehr dankbar für solche wertvollen Tipps. |
Bin selber noch Schüler in der 13, lernt man mit dem Forum aber eigentlich ganz gut(besonders aus Problemen anderer).
delphianer5 hat folgendes geschrieben : | | @ffgorcky: Doch, der Teil wird ausgeführt und funktioniert so wie ich es möchte oder habe ich dich falsch verstanden? |
ffgorcky meinte, dass die Prozedur nur aufgerufen wird, wenn der Timer auch läuft. Damit kommt deine if-Abfrage immer nur in die erste Verzweigung, nie in die Zweite.
Deine else-Teile kannst du dir eben an vielen Stellen sparen, insbesondere dort wo sie nichts machen(else: +0  ).
delphianer5 hat folgendes geschrieben : | @Narses:
Ja ok,ist nicht das erste Forum das ich nutze nur wie so oft findet man nicht eine gute Überschrift,da ich das Thema nicht so gut differenzieren konnte.Außerdem wollte ich wohl eher unbewusst mit einem allgemeinem Betreff möglichst viele Leute hier ansprechen die mir dann helfen. |
Denk' mal ein wenig nach. Um auf "Bilder über die Form bewegen" zu kommen, braucht es nun wirklich keinen 2. Abschluss
lg,
PS: Änder mal den Titel, sonst kommt bald die 2. Aufforderung 
_________________ Even the word doctor is false. Your real name is Hidden. :O
|

|
|
delphianer5
       
(Threadstarter)
Beiträge: 16 Dabei seit: 06.03.2010
|
Hidden hat folgendes geschrieben : | Du verschiebst das Bild um ein Pixel zurück, wenn es schon raus ist. dann ist es wieder drin, wandert beim nächsten TImer also wieder raus, dann wider ein Pixel rein.. Setze mal .Top auf 0, wenn das Bild raus ist.
Eine andere Möglichkeit ist, dass du das Bild um einen Betrag aus einer Variable multiplizierst, und diese dann negierst, sodass der Hummer sich in die andere Richtung bewegt(Hummer.Top := Hummer.Top + HummerTempo; if Hummer.Top > Form1. Height then HummerTempo := -Hummertempo;). |
hä?^^
Hab das nicht so wirklich ganz verstanden.Kannst du mir nen passenden Quellcode zu dem Teil schreiben den ich mit copy+paste einfügen kann und die Erklärung dadran veranschaulichen?
Hidden hat folgendes geschrieben : | ffgorcky meinte, dass die Prozedur nur aufgerufen wird, wenn der Timer auch läuft. Damit kommt deine if-Abfrage immer nur in die erste Verzweigung, nie in die Zweite.
Deine else-Teile kannst du dir eben an vielen Stellen sparen, insbesondere dort wo sie nichts machen(else: +0 ). |
Achso,ich dachte immer es muss was bei "else" stehen.
Moderiert von Narses: Zitate repariert und gekürzt.
|

|
|
Hidden
        

Beiträge: 1895 Erhaltene Danke: 9 Dabei seit: 07.01.2008
Win7(Home)x64, FF 3.6.8 Delphi 2010 Professional
|
_________________ Even the word doctor is false. Your real name is Hidden. :O
|

|
|
ffgorcky
       
Beiträge: 571 Dabei seit: 17.09.2008 Wohnort: Schleswig-Holstein, nahe Bad Bramstedt
WIN XP/2000&7Prof (Familie:Win 95,Win 98)
|
delphianer5 hat folgendes geschrieben : | Wo ist der Fehler?
|
Also ich denke mal, dass Du dort eher if Hummer2.top<0 machen möchtest, um zu sehen, ob Deine Komponente schon den oberen Rand erreicht hat. - So wie Du es geschrieben hast, guckt das Programm ja, wie weit es von dem oberen Bildschirmrand entfernt ist und wenn der Hummer2 von Deiner Titelleiste des Programms den gleichen Abstand hat, dann ist diese schon nicht mehr erfüllt.
- Noch besser fände ich dann alerdings, wenn Du das dann abbrichst, wenn der Hummer2 komplett nach oben rausgewandert ist - also so:
PS: Zu Hiddens komischem Quelltext mit dem if Timer1.Enabled then:
Das mit der Abfrage in dem Timer-Event, ob der Timer denn überhaupt an ist bringt nur dann etwas, wenn Du diese Procedure von einer anderen Procedure aus aufrufst, oder sie auch als OnClick-Ereignis oder so etwas deklarierst.
- Aber da solltest Du zu Anfang lieber nicht schon drauf eingehen, sondern Dich lieber erst mal um das wesentliche kümmern. - Das verwirrt sonst evtl. noch zu Anfang, wenn man zu viele Einzelheiten beachtet.
|

|
|
delphianer5
       
(Threadstarter)
Beiträge: 16 Dabei seit: 06.03.2010
|
@Hidden:
Der Teil macht nichts,war ja so beabsichtigt,weil ich dachte es muss immer was hin.Wenn ich weiter drüber nachdenke ist das aber wirklich nicht zwingend notwendig.Danke für die Aufklärung!^^
@ffgorcky:
Danke!
Jetzt erkenne ich meinen Fehler,nen bisschen verkehrt herum gedacht.
Jetzt muss ich nur noch die Variablen eingeben wo es unten herauskommen soll und es passt alles aus einem Guss.
Wenn ich bei der nächsten Programmierung bei dem Programm keine Probleme hab und es damit fertig ist,speichere ich ab und überarbeite meinen Quellcode.
^^Erinnert mich an Mathe,Lehrer diktiert alles, man denkt nur "Bahnhof" und wenn man es dann Schritt für Schritt selektiert ist es gar nicht mehr so schwer.
|

|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
|
|
|