[Delphi] Verschiebung eines Bildes

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Ares, 15. Mai 2007 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 15. Mai 2007
    Verschiebung eines Bildes

    Ich möchte ein Bild verschieben. Dazu soll durch eine Prozedur die Left und Top (Pixelwerte) verändert werden. Dies funktioniert jedoch noch nicht richtig, weil er das Bild immer nach so weit rechts unten verschiebt, wie wohl nur geht ... ich hoffe ihr könnt mir helfen!
    mfg Ares
     
  2. 15. Mai 2007
    AW: Verschiebung eines Bildes

    Zeig doch mal nen bisschen source das wir uns vorstellen können was du genau machst und vllt findet man ja da auch direkt nen fehler der es behebt

    Knusperkeks
     
  3. 15. Mai 2007
    AW: Verschiebung eines Bildes

    vllt. verschiebst du einfach nur zu viel.. pprobier mal +10.. das reicht vollkommen..
    Code:
    Image1.Left:=Image1.Left+10;
    Image1.Top:=Image1.Top+10;
    dann verschiebst du nach rechts unten...
     
  4. 15. Mai 2007
    AW: Verschiebung eines Bildes

    Er meint wahrscheinlich, dass das Bild über das Fenster hinaus verschoben wird. Das gleiche gibts auch bei C++. Da musst du einfach Grenzen setzen und abfragen, ob er eine bestimmte Koordinate erreicht hat. Wenn ja, dann hier nicht weiter in die Richtung.
     
  5. 15. Mai 2007
    AW: Verschiebung eines Bildes

    Deine Formulierung ist echt ein bisschen ungeschickt, Source wär ganz gut
    ausserdem kann ich dir nur empfehlen, sowas mit DirectDraw oder (besser) mit OpenGL zu machen - du bekommst viel bessere Ergebnisse (kein Flackern etc...) und kannst noch etliche andere Sachen realisieren die du mit der normalen VCL niemals machen könntest.
     
  6. 15. Mai 2007
    AW: Verschiebung eines Bildes

    bin halt noch nen noob und will erstma nen einfaches schach programmieren, ohne jetz erstmal auf regeln zu achten. und die schachfiguren sollen nach koordinaten verschoben werden, die eine bestimmte "pixelkoodinate" haben. ist alles auch noch in der entwicklungsphase, in der ich noch bissel ausprobiere!

    und das bild (ImSb1) wird außerhalb des normalen fensters nach ganz unten rechts verschoben...

    Code:
    procedure xkoordinate(var x:string);
    var a,b,c,d,e,f,g,h:string;
     l:integer;
     begin
     if x=a
     then
     l:=78
     else if x=b
     then
     l:=143
     else if x=c
     then
     l:=208
     else if x=d
     then
     l:=273
     else if x=e
     then
     l:=338
     else if x=f
     then
     l:=403
     else if x=g
     then
     l:=468
     else if x=h
     then
     l:=533
     end;
    
    procedure ykoordinate(var y:integer);
     var t:integer;
     begin
     if y=1
     then
     t:=112
     else if y=2
     then
     t:=177
     else if y=3
     then
     t:=242
     else if y=4
     then
     t:=307
     else if y=5
     then
     t:=372
     else if y=6
     then
     t:=437
     else if y=7
     then
     t:=502
     else if y=8
     then
     t:=567
     end;
    
    
    
    procedure TForm1.BitBtOkClick(Sender: TObject);
     var y,l,t:integer;
     x:string;
     begin
     if CbSf.Text='Bauer1'
     then begin
     x:=Ed_X.Text;
     y:=StrToInt(Ed_Y.Text);
     xkoordinate(x);
     ykoordinate(y);
     ImSB1.Left:=l;
     ImSB1.Top:=t;
     CbSf.Text:='Wähle Figur !';
     Ed_X.Text:='Bitte ausfüllen !';
     Ed_Y.Text:='Bitte ausfüllen !';
     end;
    end;
     
  7. 15. Mai 2007
    AW: Verschiebung eines Bildes

    Habs so gelöst gerade:

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var i : integer;
    begin
    if (image1.left <= (form1.Width - image1.left)) or (image1.top <= (form1.height - image1.Top)) then
     begin
     image1.Left := image1.Left+ 1;
     image1.Top:= image1.Top + 1;
     i:=i+1;
     end
     else abort;
    
    end;
    
    So geht das Bild automatisch maximal bis zum Form-Rand und hört dann auf.
    Könnte man auch innen Timer oder so packen ...ka
     
  8. 16. Mai 2007
    AW: Verschiebung eines Bildes

    so läuft das auch nicht wirklich, musste ne kleinigkeit verändern:
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    
    begin
     if (image1.left <= (form1.Width - image1.Width)) AND (image1.top <= (form1.height - image1.Height)) Then //wenn du hier image1.left <= (form1.Width - image1.Left) überprüfst, macht das absolut kein sinn... ;) dann geht das bild nämlich nur bis zur hälfte des fensters..
     begin
     image1.Left := image1.Left+ 1;
     image1.Top:= image1.Top + 1;
     end
    end;
    
    aber das war mein ich auch nicht sein problem

    ²t: beschäftige dich mal mit globalen und lokalen variablen. außerdem solltest du dir nochmal die unterscheidung zwischen string, variablen name und wert einer variablen angucken.... also informier dich einfach übere variablen und alles was dazu gehört
    wenn du in einer prozedur eine variable definierst, ist die nur in der prozedur gültig, wenn du ins hauptprogramm zurück springst, nicht mehr. daher wird bei ImSB1.Left:=l; nur müll darein geschrieben, weil l:=242 im hauptprogramm nicht mehr gültig ist... das kannste über funktionen oder wie bereits erwähnt globale variablen lösen.
    und 'a' ist nicht gleich a.. a ist eine variable, wo hingegen 'a' ein string mit dem inhalt 'a' ist..
    außerdem gibts für die schönere programmstruktur auch noch den befehl case ... of, aber das wäre zuviel des guten^^
    Code:
    function xkoordinate(var x:string):Integer;
    
     begin
     if x='a'
     then
     result:=78
     else if x='b'
     then
     result:=143
     else if x='c'
     then
     result:=208
     else if x='d'
     then
     result:=273
     else if x='e'
     then
     result:=338
     else if x='f'
     then
     result:=403
     else if x='g'
     then
     result:=468
     else if x='h'
     then
     result:=533
     end;
    
    function ykoordinate(var y:integer):Integer;
    
     begin
     if y=1
     then
     result:=112
     else if y=2
     then
     result:=177
     else if y=3
     then
     result:=242
     else if y=4
     then
     result:=307
     else if y=5
     then
     result:=372
     else if y=6
     then
     result:=437
     else if y=7
     then
     result:=502
     else if y=8
     then
     result:=567
     end;
    
    
    
    procedure TForm1.BitBtOkClick(Sender: TObject);
     var y:integer;
     x:string;
     begin
     if CbSf.Text='Bauer1'
     then begin
     x:=Ed_X.Text;
     y:=StrToInt(Ed_Y.Text);
     ImSB1.Left:=xkoordinate(x);
     ImSB1.Top:=ykoordinate(y);
     CbSf.Text:='Wähle Figur !';
     Ed_X.Text:='Bitte ausfüllen !';
     Ed_Y.Text:='Bitte ausfüllen !';
     end;
    end;
     
  9. 16. Mai 2007
    AW: Verschiebung eines Bildes

    bei so vielen Variablen legt dir bestimmt jeder entweder ein Record
    oder ein array ans herz .. ganz ehrlich.

    Und als Einsteigerprogramm is nen Schachspiel mal ehrlich ganzschön schwer ^^
    Jo seh meinen Fehler.
    mein Programm lässt das Bild zwar bis unten gehen aber nich bis ganz rechts da vorher der untere rand erreicht wurde.... wayne ^^
    =P

    Naja....

    wie gesagt : array, record, variablen ( global,lokal) , und schleifen vllt mal

    s
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.