Hvis det er et tegneprogram alá MS Paint ville jeg ikke gå så drastisk som til DirectX og slet ikke OpenGL! Mindre kan gøre det! Brug bare Delphi's indbygget Canvas og komponenterne TBitmap, TImage osv.
Men er det fordi du vil være mere advanceret, og kender rigtigt godt til Delphi i forvejen, kunne det måske være meget udfordrende at gå i krig med hardware understøttet grafik! DirectX her, helt sikkert, være vejen!
Held og Lykke
Hej,
Søren har fuldstændig ret, du har ikke brug for OpenGL eller DirectX med mindre du har planlagt at dit tegne program skal kunne render i 3D.
Jeg ville kigge omkring på nettet efter implementeringer af forskellige grafik formater samt benytte komponentet Graphics32 som er en implementation ala TBitmap men med support for layers samt en masse andet.
Graphics32: http://www.g32.org/graphics32/
- Kig evt. under "Third-Party" menuen, der finder du også en masse relavant source du måske kan bruge.
PNG format: http://pngdelphi.sourceforge.net/
GIF format: http://finn.mobilixnet.dk/delphi/
- Her findes også en masse source som kan være interessant for dig.
Delphi har selv support for BMP og JPG så disse kan du jo med fordel bruge.
Håber det hjælper dig lidt på vej.
/Michael.
[Redigeret d. 20/04-04 07:03:10 af Michael Skovslund]
[Redigeret d. 20/04-04 07:04:18 af Michael Skovslund]
Et decideret kode eksempel er jo umuligt at komme med i denne tråd, men jeg kan vise dig hvordan du tegner på et TImage...
Dette kan også gøres i en TPaintBox, men denne "husker" ikke dit billede hvis du fx minimerer programmet, så der bør du gøre brug af en form for buffer...
Men her er der en lille kode, som vise hvordan du kan tegne på et TImage...
Jeg vil dog foreslå dig at eksperimentere med andre måder at gøre det på, når du finder ud af hvordan det fungerer
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
procedure FormShow(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ImgMouseDown: TPoint;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
Image1.Canvas.Brush.Color := clWhite; //Vælg en baggrunds farve til dit billede
Image1.Canvas.FillRect(Rect(0, 0 , Image1.Width , Image1.Height)); //Udfyld billedet med farven
//Sæt ImgMouseDown til standard værdien
ImgMouseDown.X := -1;
ImgMouseDown.Y := -1;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//Sæt ImgMouseDown til det punkt, som der blev presset på
ImgMouseDown.X := X;
ImgMouseDown.Y := Y;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//Sæt ImgMouseDown tilbage til standard værdierne
ImgMouseDown.X := -1;
ImgMouseDown.Y := -1;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//Tjek om ImgMouseDown er anderledes end standard værdierne
if (ImgMouseDown.X <> -1) or (ImgMouseDown.Y <> -1) then
begin
with Image1.Canvas do
begin
Pen.Color := clBlack; //Sæt streg farven
MoveTo(ImgMouseDown.X, ImgMouseDown.Y); //Sæt pennen på det punkt, som der blev presset på
LineTo(X, Y); //Træk en streg til det punkt, som pennen er i nu
end;
//Opdater ImgMouseDown med den nye position af cursoren
ImgMouseDown.X := X;
ImgMouseDown.Y := Y;
end;
end;
end.
Der mangler selvfølgelig mange ting i dette eksempel, som fx, at brugeren skal kunne vælge farve selv, og at der skal være mulighed for at lave firkanter og lige streger osv osv...
Men det er umuligt at skrive det hele ned, og desuden ville det jo så slet ikke være dig selv der lavede programmet
/Mads