AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Projekt mit PaintBoxen funktioniert nich wie gewollt :/
Thema durchsuchen
Ansicht
Themen-Optionen

Projekt mit PaintBoxen funktioniert nich wie gewollt :/

Ein Thema von cetinbiryoldayim · begonnen am 22. Mai 2008 · letzter Beitrag vom 22. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#1

Projekt mit PaintBoxen funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:03
Hey Leute,
ich hab mal wieder ein großes Prolem für mich bzw. ein kleines Problem für euch.

Ich habe folgende Anwendung programmiert, die durch Eingabe von 4 Werten (somit 2 Koordinaten, 2 Eckpunkte für ein Rechteck) ein Rechteck auf einer PaintBox darstellen soll.
Sobald der Timer durch den Button6-Click enabled wird soll das Rechteck(=Balken im Programm) mit jedem Timerdurchlauf auf der X-Achse und der Y-Achse verschoben werden.

zusätzliche Informationen:
BalkenKoordinaten[1..8,0..4]: array of integer
--> speichert maximal 8 Rechtecke (1..8 )
--> mit ihrer x-Richtung (Speicherstelle 0),
--> ihren Koordinaten x1,y1,x2,y2 (Speicherstelle 1..4)

FEHLER: die Rechtecke werden nicht verschoben in x und y Richtung

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    PB_ViewingBox: TPaintBox;
    PB_BufferBox: TPaintBox;
    I_Background: TImage;
    I_Mask: TImage;
    I_Inhalt: TImage;
    Label14: TLabel;
    Label15: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button2: TButton;
    Timer1: TTimer;
    Label7: TLabel;
    Button3: TButton;
    Button4: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  strict private
  public
    procedure definiereMaskundInhaltRects();
    function invertiereXRichtung(p_nr:integer):integer;
    procedure frageXRichtung(p_nr: integer);

    procedure ZeichneNeu();
    procedure ZeichneBackground();
    procedure ZeichneMaskAndInhalt();
    procedure AusgabeViewingBox();
    procedure zeichneBalken(x1,y1,x2,y2: integer);
  end;

var
  Form1: TForm1;
  anzahlBalken: integer = 0;
  BalkenKoordinaten: array[1..8,0..4] of integer;
  BackgroundZielRect: TRect;
  BackgroundQuellRect: TRect;
  MaskZielRect: array[1..8] of TRect;
  MaskQuellRect: array[1..8] of TRect;
  InhaltZielRect: array[1..8] of TRect;
  InhaltQuellRect: array[1..8] of TRect;
  BufferBoxZielRect: TRect;
  BufferBoxQuellRect: TRect;
  gedrueckteTasten: array[0..3] of boolean;
  geschwX: integer = 5; // Geschwindigkeit in X
  geschwY: integer = 1; // und Y


implementation

{$R *.dfm}






procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer;
begin

  for i:=1 to anzahlBalken do
  begin
    frageXRichtung(i);

    if BalkenKoordinaten[i,0] = 0 then
    begin
      BalkenKoordinaten[i,1] := BalkenKoordinaten[i,1]-geschwX;
      BalkenKoordinaten[i,3] := BalkenKoordinaten[i,3]-geschwX;
    end;

    if BalkenKoordinaten[i,0] = 1 then
    begin
      BalkenKoordinaten[i,1] := BalkenKoordinaten[i,1]+geschwX;
      BalkenKoordinaten[i,3] := BalkenKoordinaten[i,3]+geschwX;
    end;

    BalkenKoordinaten[i,2] := BalkenKoordinaten[i,2]-geschwY;
    BalkenKoordinaten[i,4] := BalkenKoordinaten[i,4]-geschwY;
  end;
  ZeichneNeu();
  label7.caption := IntToStr(StrToInt(label7.caption)+1)
end;

procedure TForm1.ZeichneNeu();
begin
  ZeichneBackground();
  ZeichneMaskAndInhalt();
  AusgabeViewingBox();
end;


procedure TForm1.definiereMaskundInhaltRects();
begin
  I_Mask.Canvas.Brush.Color := clBlack;
  I_Mask.Canvas.Pen.Color := clBlack;
  I_Mask.Canvas.Rectangle(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[1,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]);

  MaskZielRect[anzahlBalken] := Rect(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]);
  MaskQuellRect[anzahlBalken] := Rect(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]);


  I_Inhalt.Canvas.Brush.Color := clBlue;
  I_Inhalt.Canvas.Pen.Color := clBlue;
  I_Inhalt.Canvas.Rectangle(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]);

  InhaltZielRect[anzahlBalken] := Rect(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]);
  InhaltQuellRect[anzahlBalken] := Rect(BalkenKoordinaten[anzahlBalken,1],BalkenKoordinaten[anzahlBalken,2],BalkenKoordinaten[anzahlBalken,3],BalkenKoordinaten[anzahlBalken,4]);

end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  BackgroundZielRect := Rect(0,0,PB_BufferBox.Width,PB_BufferBox.Height);
  BackgroundQuellRect := Rect(0,0,I_Background.Width,I_Background.Height);

  BufferBoxZielRect := Rect(0,0,PB_ViewingBox.Width,PB_ViewingBox.Height);
  BufferBoxQuellRect := Rect(0,0,PB_BufferBox.Width,PB_BufferBox.Height);
end;


procedure TForm1.frageXRichtung(p_nr: integer);
begin
  if BalkenKoordinaten[p_nr,1]>geschwX then
  begin
    BalkenKoordinaten[p_nr,0] := invertiereXRichtung(p_nr);
  end;
  if BalkenKoordinaten[p_nr,3]>(400-geschwX) then
  begin
    BalkenKoordinaten[p_nr,0] := invertiereXRichtung(p_nr);
  end;
end;


function TForm1.invertiereXRichtung(p_nr: integer):integer;
begin
  if BalkenKoordinaten[p_nr,0] = 0 then
  begin
    result := 1;
  end;
  if BalkenKoordinaten[p_nr,0] = 1 then
  begin
    result := 0;
  end;
end;


procedure TForm1.zeichneBalken(x1,y1,x2,y2: integer);
begin
  BalkenKoordinaten[anzahlBalken,1] := x1;
  BalkenKoordinaten[anzahlBalken,2] := y1;
  BalkenKoordinaten[anzahlBalken,3] := x2;
  BalkenKoordinaten[anzahlBalken,4] := y2;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  anzahlBalken := anzahlBalken+1;
  zeichneBalken(StrToInt(Edit1.Text),StrToInt(Edit2.Text),
                StrToInt(Edit3.Text),StrToInt(Edit4.Text));
  definiereMaskundInhaltRects();
  zeichneMaskAndInhalt();
end;


procedure TForm1.ZeichneBackground();
begin
  PB_BufferBox.Canvas.CopyMode := cmSrcCopy;
  PB_BufferBox.Canvas.CopyRect(BackgroundZielRect,
                               I_Background.Canvas,
                               BackgroundQuellRect);
end;


procedure TForm1.ZeichneMaskAndInhalt();
var i: integer;
begin
  for i:=1 to anzahlBalken do
  begin
    PB_BufferBox.Canvas.CopyMode := cmSrcAnd;
    PB_BufferBox.Canvas.CopyRect(MaskZielRect[i],
                                 I_Mask.Canvas,
                                 MaskQuellRect[i]);

    PB_BufferBox.Canvas.CopyMode := cmSrcPaint;
    PB_BufferBox.Canvas.CopyRect(InhaltZielRect[i],
                                 I_Inhalt.Canvas,
                                 InhaltQuellRect[i]);
  end;
end;


procedure TForm1.AusgabeViewingBox();
begin
  PB_ViewingBox.Canvas.CopyMode := cmSrcCopy;
  PB_ViewingBox.Canvas.CopyRect(BufferBoxZielRect,
                                PB_BufferBox.Canvas,
                                BufferBoxQuellRect);
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
  ZeichneBackground();
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  AusgabeViewingBox();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Timer1.Enabled := true;
end;

end.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Projekt funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:04
Und was geht nicht?
Markus Kinzler
  Mit Zitat antworten Zitat
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#3

Re: Projekt funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:06
sry
die Rechtecke werden in x und y Richtung nicht verschoben
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Projekt funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:07
Versuch mal .Paint zu überschreiben
Markus Kinzler
  Mit Zitat antworten Zitat
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#5

Re: Projekt funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:11
wie soll das genau gehen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Projekt funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:12
Könntest du deinem Beitrag bitte einen aussagekräftigen Titel geben der dein Problem ansatzweise beschreibt. Das irgendwas nicht funktioniert sagt bereits die Rubrik aus und mehr sagt dein Titel momentan nicht aus.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#7

Re: Projekt funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:15
Zitat von SirThornberry:
Könntest du deinem Beitrag bitte einen aussagekräftigen Titel geben der dein Problem ansatzweise beschreibt. Das irgendwas nicht funktioniert sagt bereits die Rubrik aus und mehr sagt dein Titel momentan nicht aus.
+Paintbox
sry genauer gehts glaub garnicht ^^

angefügt
Zitat von mkinzler:
Versuch mal .Paint zu überschreiben
könntest du mir sagen was du genau meinst?

[edit=SirThornberry]Beiträge zusammengeführt - zukünftig bitte NICHT pushen - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Projekt mit PaintBoxen funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:20
Alle Zeichen-Operationen sollte im PaintEvent durchgeführt werden, da er aufgerufen wird, wenn die Kompo neu gezeichnet werden muss
Markus Kinzler
  Mit Zitat antworten Zitat
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#9

Re: Projekt mit PaintBoxen funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:27
Zitat von mkinzler:
Alle Zeichen-Operationen sollte im PaintEvent durchgeführt werden, da er aufgerufen wird, wenn die Kompo neu gezeichnet werden muss
öhmm.. soll ich jetzt mein ganzes Programm in den OnPaint-Ereignis reinstecken oder wie...
weil das ganze Programm besteht großteils auch Zeichen-Funktionen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Projekt mit PaintBoxen funktioniert nich wie gewollt :/

  Alt 22. Mai 2008, 21:29
Nein nur die Zeichenoperationen
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 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