Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
Delphi XE2 Architect
|
Brauche Hilfe mit der Graphics32 Lib!
3. Apr 2011, 10: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.
|
|
Zitat
|