Announcement

Collapse
No announcement yet.

Wie kann ich diese Prodeduren zu einer Komponente machen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann ich diese Prodeduren zu einer Komponente machen?

    Hallo, ich habe folgenden Quellcode den ich gern zu einer Komponente machen würde. Leider habe ich von Komponentenerstellung noch keinerlei Ahnung.
    Könnte mir eventuell jemand den folgenden Code zu einer Komponente machen so dass ich erst mal im groben sehen kann wie es funktioniert?

    var
    Form1: TForm1;
    z : boolean;
    t, h : integer; //Top, height (range)
    r : integer; //Richtung (0 = vertikal, 1 = horizontal)

    implementation

    {$R *.dfm}

    procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    z := True;
    end;

    procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    z := False;
    end;

    //Regler mit der Maus verschieben
    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    begin
    if z then
    begin

    //Vertikal bewegen
    if r=0 then
    begin
    if(x>=0) AND (x<=Image1.Width) then
    begin
    if(Image1.Top > t) AND (Image1.Top < h) then
    Image1.Top:=y+(Image1.Top-Image1.Height div 2);

    if(Image1.Top <= t) then Image1.Top := t+1;
    if(Image1.Top >= h) then Image1.Top := h-1;
    end;
    end;

    // Horizontal bewegen
    if r=1 then
    begin
    if(y>=0) AND (y<=Image1.Height) then
    begin
    if(Image1.Left > t) AND (Image1.Left < h) then
    Image1.Left:=x+(Image1.Left-Image1.Width div 2);

    if(Image1.Left <= t) then Image1.Left := t+1;
    if(Image1.Left >= h) then Image1.Left := h-1;
    end;
    end;
    end;
    end;

    //Regler mit Tasten verschieben
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
    begin
    //vertikale Ausrichtung
    if r=0 then
    begin
    if(Image1.Top > t) AND (Image1.Top < h) then
    begin
    if(key = VK_DOWN) then
    Image1.Top:=Image1.Top+10;
    if(key = VK_Up) then
    Image1.Top:=Image1.Top-10;
    end;
    if(Image1.Top <= t) then Image1.Top := t+1;
    if(Image1.Top >= h) then Image1.Top := h-1;
    end;

    //horizontale Ausrichtung
    if r=1 then
    begin
    if(Image1.Left > t) AND (Image1.Left < h) then
    begin
    if(key = VK_RIGHT) then
    Image1.Left:=Image1.Left+10;
    if(key = VK_LEFT) then
    Image1.Left:=Image1.Left-10;
    end;
    if(Image1.Left <= t) then Image1.Left := t+1;
    if(Image1.Left >= h) then Image1.Left := h-1;
    end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Form1.DoubleBuffered := true;
    t := 20;
    h := 300;
    r := 1;
    end;

    Vielen Dank

  • #2
    Hi ensacom,

    was willst Du denn genau erreichen? Wenn Du Dir eine Komponente bastelst, kannst Du diese in die Registerleiste einbinden und später in Deinen Projekten verwenden.

    In Deinem Beispiel nutzt Du aber Formular-Ereignisse, um etwas auszuführen.

    Um mit der Komponentenentwicklung vertraut zu werden, leite doch erst einmal z.B. eine TMyPanel von TPanel ab (alles bleibt wie bei TPanel aber im constructor setzt Du die Farbe auf clRed). Die registrierst ("procedure Register" und und Delphi "Komponente hinzufügen") Du dann und kannst sie künftig verwenden und Stück für Stück ausbauen.

    Wenn Du das fertig hast, hast Du erst mal den Einstieg.

    Dann änderst Du in der .pas clRed in clGreen. Wenn Du Dein Programm startest, sieht das Panel grün aus. In der IDE aber noch rot. In der IDE wird die Quelltextänderunfg erst wirksam, wenn Du das Package neu kompilierst und damit die Komponente neu registrierst.

    So, nun weißst Du erst mal, dass und wie es grundsätzlich funktioniert. Nun kannst Du im construktor der Kompo noch ein Image hinzufügen und instanziieren und erst mal per Zufall bewegen lassen.

    Wenn das funzt, kannst Du die Tastatur und Maussteuerung der Komponente umbiegen und darüber das Image steuern. Das wird ein bissl aufwendiger, aber das kriegen wir schon. Frag dann halt wieder :-)

    Das eigene Panel kannst Du dann in jedem Programm einsetzen und darin das Bild bewegen...

    Gruß Stahl

    Comment

    Working...
    X