Farbpunkte auf der Form erzeugen

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Airmetz
Beiträge: 17
Registriert: Fr 12. Feb 2010, 20:49

Farbpunkte auf der Form erzeugen

Beitrag von Airmetz »

Hallo Liebe/r Leser/in,
Ich würde gerne wissen wie man durch klicken auf die Form
farbpunkte erzeugt, bzw. wie man dort durch klicken ein img eingügen kann
beispiel.: Ich klicke auf die form, auf der form befindet sich eine zielscheibe..
und wenn ich nun klicke soll dort ein img eingefügt werden, zb. ein loch etc.
wo muss ich welche befehle eingragen.

Hoffe mir wird schnell geholfen, :)
Vielen Dank schonmal .
Liebe Grüße

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Farbpunkte auf der Form erzeugen

Beitrag von Scotty »

Benutze die Methoden des TCanvas des Formulars.

Code: Alles auswählen

Form1.Canvas.Pixels[x,y]:=clRed
Form1.Canvas.Draw(x,y,aBitmap)

Airmetz
Beiträge: 17
Registriert: Fr 12. Feb 2010, 20:49

Re: Farbpunkte auf der Form erzeugen

Beitrag von Airmetz »

Also wenn ich die erste funktion unter OnClick einfüge wird keine fehlermeldung angezeigt,
aber auf der form wird auch kein farbpunkt gemacht.

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: Farbpunkte auf der Form erzeugen

Beitrag von hendy »

x,y sind variablen, hast du die gesetzt?
Dankt monta !!

Airmetz
Beiträge: 17
Registriert: Fr 12. Feb 2010, 20:49

Re: Farbpunkte auf der Form erzeugen

Beitrag von Airmetz »

Ja ich habe dort die Variablen [50,50] gesetzt.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Farbpunkte auf der Form erzeugen

Beitrag von Scotty »

Nimm mal das OnPaint()-Ereignis. Für produktive Zwecke solltest du es aber prinzipiell anders machen.

Airmetz
Beiträge: 17
Registriert: Fr 12. Feb 2010, 20:49

Re: Farbpunkte auf der Form erzeugen

Beitrag von Airmetz »

Habe es auch mit on paint versucht, jedoch wird kein punkt gesetzt.
muss ich noch i was unter uses etc. eintragen.?
bin echt ein noob : )
und habe somit wenig ahnung..

pierredrks
Beiträge: 34
Registriert: Do 4. Okt 2007, 18:35
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Braunfels

Re: Farbpunkte auf der Form erzeugen

Beitrag von pierredrks »

Erhöhe mal die Stiftgröße. Ich hatte es auch mal, dass Linien mit 1 Pixel Breite nicht zu sehen waren.
Geht wenn ich mich richtig erinnere so:

Code: Alles auswählen

Form1.Canvas.Pen.width = irgendein Wert > 1
Das Herz besitzt Gründe, die die Vernunft nicht kennt.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Farbpunkte auf der Form erzeugen

Beitrag von Scotty »

Der Pen hat nichts mit einem Pixel zu tun. Wenn der Bildpunkt zu klein ist, hilft Canvas.Circle() - Brush.Color für die Farbe, Pen für den Rand. Für eine Zielscheibe würde ich allerdings ein Bitmap erzeugen.
bin echt ein noob : )
Zumindest was die Netiquette betrifft. Bitte nimm Dir ein paar Minuten Zeit zum Schreiben eines Beitrags und achte auf Groß-/Kleinschreibung.

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: Farbpunkte auf der Form erzeugen

Beitrag von felix96 »

achte auf Groß-/Kleinschreibung.
ihr immer mit eurer groß- und kleinschreibung...

Bei mir funktionirts so gut(zumindest mit dem Farbpunkt):

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var i, j: integer;
begin
  form1.Color := clwhite;
  randomize;
  for j := 1 to 100 do     // z.B.
  for i := 1 to form1.Width do // muss auch nicht sein
  form1.Canvas.Pixels[random(Form1.Width),random(Form1.height)] := rgbtocolor(random(255),random(255),random(255));
end;
 
// oder
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   form1.Canvas.Pixels[x,y] := clred;
   form1.Canvas.Pixels[x,y + 1] := clred;
   form1.Canvas.Pixels[x + 1,y] := clred;   // oder für einen kleinen roten Punkt
   form1.Canvas.Pixels[x,y - 1] := clred;
   form1.Canvas.Pixels[x - 1,y] := clred;
end;
 
// oder
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   image1.Picture.LoadFromFile('C:\zielscheibe.bmp');
end;
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  x := x + random(7); // für den wind
  y := y - random(7);
  image1.Canvas.Pixels[x,y] := clred;
  image1.Canvas.Pixels[x,y + 1] := clred;
  image1.Canvas.Pixels[x + 1,y] := clred;
  image1.Canvas.Pixels[x,y - 1] := clred;
  image1.Canvas.Pixels[x + 1,y] := clred;
end;
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

Airmetz
Beiträge: 17
Registriert: Fr 12. Feb 2010, 20:49

Re: Farbpunkte auf der Form erzeugen

Beitrag von Airmetz »

Danke schööön :)
Liebe Grüße

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Farbpunkte auf der Form erzeugen

Beitrag von theo »

Naja, auf Form.Canvas zeichnen sollte man immer im OnPaint Ereignis. Unter Windows z.B. ist das Zeichnen ausserhalb nur flüchtig (d.h wird von überlappendem Fenster gelöscht) unter OSX passiert da glaubs gar nix.

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: Farbpunkte auf der Form erzeugen

Beitrag von felix96 »

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  image1.Picture.LoadFromFile('C:\Dokumente und Einstellungen\Tobias\Desktop\zielsc~1.bmp');
end;
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var punkte: string;
begin
  x := x + random(trackbar1.Position);    // wind einstellbar durch trackbar
  y := y - random(trackbar1.Position);
 
  if image1.Canvas.Pixels[x,y] = 0 then punkte := '0';   //schwarz = 0 / braun = 32896 / blau = 16750848 / grün = 10092288/ gelb = 65535
  if image1.Canvas.Pixels[x,y] = 32896 then punkte := '10';
  if image1.Canvas.Pixels[x,y] = 16750848 then punkte := '20';
  if image1.Canvas.Pixels[x,y] = 10092288 then punkte := '30';
  if image1.Canvas.Pixels[x,y] = 65535 then punkte := '40';        // trefferauswertung
  if image1.Canvas.Pixels[x,y] = clwhite then punkte := '50';
 
  image1.canvas.pixels[x,y] := clred;
  image1.canvas.pixels[x + 1,y] := clred;
  image1.canvas.pixels[x,y + 1] := clred;        // punkt machen          
  image1.canvas.pixels[x - 1,y] := clred;                                      
  image1.canvas.pixels[x,y - 1] := clred;
  showmessage('Punkte: ' + punkte);  // der punkt ging bei mir durch verkleinern etc. nict weg
end;


Wie gesagt :

Code: Alles auswählen

// der punkt ging bei mir durch verkleinern etc. nict weg
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: Farbpunkte auf der Form erzeugen

Beitrag von felix96 »

P.S. die angaben mit den Zahlen kann man so raus kriegen:

Code: Alles auswählen

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  edit1.text := inttostr(image1.Canvas.Pixels[x,y]);
end;
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

Antworten