Einzelnen Beitrag anzeigen

Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#1

Brauche Hilfe mit der Graphics32 Lib!

  Alt 3. Apr 2011, 09:33
Hi

Ich benutze TImage32 + Bass.dll um die (Audio-Sample-Date) zu zeichnen.

Nun möchte ich 3 vertikale Linien zeichnen die ich dann mit der Maus Verschieben kann.

Wen ich ImageBuffer.Canvas.MoveTo(x, y); benutze, wird diese gelöscht sobald ein anderes Fenster drüber gezogen wird. Und wen ich ImageBuffer.Bitmap.MoveToF(x, 0); benutze wird das
Canvas nicht Erneuert!

Delphi-Quellcode:

ImageBuffer: TImage32;


function TTrackProperties_Form.ProgressCallback(FileName: String; Progress: Double; var AbortSampling: Boolean; EventType: TSampleDisplayEvent; User: Pointer): Boolean; stdcall;
var
  State: String;
begin
 if EventType = sdeSampling then State := 'Sampling ';
 if EventType = sdeDrawing then State:= 'Drawing ';
 if EventType = sdeStretching then State := 'Stretching ';
  Caption := State + FloatToStr(Progress) + '%';
   Result := True;
end;

function HexToInt(HexStr: String): Integer;
begin
  Result := StrToInt('$' + HexStr);
end;


Procedure TTrackProperties_Form.DrawSample(Filename : String);
var SampleOptions: TSamplePictureOptions;
    SampleDisplay: TSampleDisplayThread;
begin

  try
    try
     ZeroMemory(@SampleOptions, SizeOf(TSamplePictureOptions));
     SampleOptions.SampleLeft := HexToInt('FF00FF00');
     SampleOptions.SampleRight:= HexToInt('FFFF0000');
     SampleOptions.SampleBackground:= clBlack32;
     SampleOptions.AntiAliasingLevel := 2;
     SampleOptions.ProgressCallback := ProgressCallback;
            //* Reasonable value is between 250 - 1000 ms
     SampleOptions.CallbackInterval := 20;
  // if ImageAudio.Bitmap.Empty then
     ImageBuffer.Bitmap.Width := ImageBuffer.Width;
     ImageBuffer.Bitmap.Height := ImageBuffer.Height;
     ImageBuffer.Bitmap.Clear(clBlack32);

     SampleDisplay:= TSampleDisplayThread.Create(Filename, ImageBuffer.Bitmap, SampleOptions);
     SampleDisplay.Resume;
    except
     // error
    end;
  finally

  end;
end;




procedure TTrackProperties_Form.DrawTime_Line(Position, TimeSec : Int64; y : integer; cl : TColor);
var
  Time, X : Integer;
begin
  Time:= TimeSec;
  X:= position div bpp;

 // ImageBuffer.Bitmap.Clear(clTrBlack32);
  ImageBuffer.Bitmap.DrawMode:= dmTransparent;
  ImageBuffer.Bitmap.SetStipple([clRed32, clRed32, clRed32, clRed32, 0, 0, 0, 0]);
  ImageBuffer.Bitmap.MoveToF(x, 0);
  ImageBuffer.Bitmap.LineToFSP(x, ClientHeight);

{
  ImageBuffer.Refresh;
  ImageBuffer.Canvas.Pen.Color:=  clSilver;
  ImageBuffer.Canvas.Pen.Width:= 1;
  ImageBuffer.Canvas.MoveTo(x, 0);
  ImageBuffer.Canvas.LineTo(x, ClientHeight);
}


end;

procedure TTrackProperties_Form.ImageBufferMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer);
begin
   DrawTime_Line(X, 0, 0, clRed);
end;

Danke für eure Hilfe!!! Thx.
Miniaturansicht angehängter Grafiken
filecut-1.jpg   filecut-2.jpg  
  Mit Zitat antworten Zitat