Announcement

Collapse
No announcement yet.

wie kann man einen seperaten Layer programmieren ?

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

  • wie kann man einen seperaten Layer programmieren ?

    Ich habe einen Plotter für mathematische Funktionen programmiert und möchte nun mit einem Punkt oder einer Linie über den Graph fahren. Dabei soll dieser aber nicht verändert werden. Wie kann ich dieses Problem lösen ? Danke für Eure Antworten

  • #2
    Unter http://sourceforge.net/projects/graphics32 gibt es ein TImage32, welches unter anderem auch Layer unterstützt.<br>
    Detailierte Kenntnisse habe diesbezüglich aber keine.<br>
    Dietma

    Comment


    • #3
      Danke für den Hinweis auf diese Komponenten. Ich hab sie mir eben angeschaut und ich denke, sie helfen mir weiter. Ich werde gegebenenfalls etwas Source hier veröffentlichen. Danke. Jose

      Comment


      • #4
        Ich habe mit der Komponente TImage32 rumgebastelt und eine Lösung erarbeitet. Eine einfache Variante dieser Lösung könnt Ihr unten aufgelistet sehen. Das Beispiel zeigt wie auf einem TImage eine Ellipse gezeichnet wird über die dann jeweils eine waagerechte und eine senkrechte rote Linie bewegt werden kann. Die senkrechte und die waagerechte Linie befinden sich jeweils in einem eigenen Layer.

        Erstellt wurde der Source mit Delphi 5 unter Verwendung der Komponente TImage32. Diese Komponenten sind erhältlich unter http://sourceforge.net/projects/graphics32 . Nochmals Danke an Dietmar Elsässer.

        <PRE>
        unit Unit1;
        <p>
        interface
        <p>
        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
        StdCtrls, GR32_Image, GR32, GR32_Layers;
        <p>
        type
        TForm1 = class(TForm)
        Image1: TImage32;
        procedure FormActivate(Sender: TObject);
        procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
        Y: Integer; Layer: TCustomLayer);
        private
        { Private-Deklarationen }
        public
        { Public-Deklarationen }
        end;
        <p>
        var
        Form1: TForm1;
        <p>
        implementation
        <p>
        {$R *.DFM}
        <p>
        procedure TForm1.FormActivate(Sender: TObject);
        var
        ALayer: TBitmapLayer;
        L: TFloatRect;
        <p>
        h: Integer;
        w: Integer;
        begin
        Image1.SetupBitmap;
        Image1.BeginUpdate;
        Image1.Bitmap.Clear(clWhite);
        <p>
        h := Image1.Height;
        w := Image1.Width;
        <p>
        //Wir malen einen Kreis
        Image1.Bitmap.Canvas.Ellipse(h div 2, w div 2, 70, 20);
        <p>
        // Einen neuen Layer kreieren...
        ALayer := TBitmapLayer.Create(Image1.Layers);
        with ALayer do
        begin
        // In die Mitte setzen
        <p>
        L.Left := h div 2;
        L.Top := 0;
        L.Right := L.Left + 1;
        L.Bottom := h;
        ALayer.Location := L;
        <p>
        ALayer.Bitmap.Create;
        ALayer.Bitmap.SetSize(1,h);
        Alayer.Bitmap.DrawMode := dmBlend;
        Alayer.Bitmap.MasterAlpha := 180;
        ALayer.Bitmap.Clear(clWhite32);
        Alayer.Bitmap.VertLineT(0,0,h,clRed32);
        end;
        <p>
        // Einen weiteren Layer kreieren...
        ALayer := TBitmapLayer.Create(Image1.Layers);
        with ALayer do
        begin
        // In die Mitte setzen
        <p>
        L.Left := 0;
        L.Top := w div 2;
        L.Right := w;
        L.Bottom := L.Top + 1;
        ALayer.Location := L;
        <p>
        ALayer.Bitmap.Create;
        ALayer.Bitmap.SetSize(w,1);
        Alayer.Bitmap.DrawMode := dmBlend;
        Alayer.Bitmap.MasterAlpha := 180;
        ALayer.Bitmap.Clear(clWhite32);
        Alayer.Bitmap.HorzLineT(0,0,w,clRed32);
        end;
        <p>
        Image1.EndUpdate;
        end;
        <p>
        procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
        Y: Integer; Layer: TCustomLayer);
        var
        ALayer: TBitmapLayer;
        L: TFloatRect;
        begin
        Image1.BeginUpdate;
        L.Left := X;
        L.Top := 1;
        L.Right := X+1;
        L.Bottom := Image1.Height;
        ALayer:=TBitmapLayer(Image1.Layers[0]);
        ALayer.Location:=L;
        <p>
        L.Left := 1;
        L.Top := Y;
        L.Right := Image1.Width;
        L.Bottom := Y+1;
        ALayer:=TBitmapLayer(Image1.Layers[1]);
        ALayer.Location:=L;
        <p>
        Image1.EndUpdate;
        Image1.Invalidate;
        end;
        <p>
        end.
        </PRE>

        Fragen hierzu beantworte ich gerne.

        Josef Göckle

        Comment

        Working...
        X