AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

löcher inner wand

Ein Thema von Maddin1 · begonnen am 2. Jan 2007 · letzter Beitrag vom 4. Jan 2007
Antwort Antwort
Maddin1
(Gast)

n/a Beiträge
 
#1

löcher inner wand

  Alt 2. Jan 2007, 21:51
ich würde gerne einschusslöcher in einer wand (ein image) machen lassen, was muss ich da machen per canvas?
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#2

Re: löcher inner wand

  Alt 2. Jan 2007, 21:54
Schon die AGB / Kodex gelesen Suche benutzen...dann findet man nämlich das:

Delphi-Quellcode:
procedure Circle(Canvas: TCanvas; X, Y, Radius: Word; Color: TColor);
var
  x1, x2, y1, y2, r2, d: integer;
  h: real;
begin
  H := 0.5;
  Y2 := 0;
  d := round((Radius * 3.2) / (SQR(2) + h));
  X2 := Radius * Radius;
  x1 := Radius;
  R2 := X2 + d;
  for y1 := 0 to d do
  begin
    if Y2 + X2 > R2 then
    begin
      X2 := X2 - x1 - x1 + 1;
      x1 := x1 - 1;
    end;
    with Canvas do
    begin
      pixels[X - x1, Y - y1] := Color;
      // ...
    end;
    Y2 := Y2 + y1 + y1 + 1;
  end;
end;
Mit dieser Prozedur kann man z.b. auf das Canvas eines Images einen Kreis zeichen / Einschussloch


Tobi
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#3

Re: löcher inner wand

  Alt 3. Jan 2007, 01:52
mhm...der code malt bei mir schonmal keinen kreis, sondern nur einen teil einer elipse...warum nicht einfach

Delphi-Quellcode:
procedure Circle(Canvas: TCanvas; X, Y, Radius: Word; Color: TColor);
var
  x1: integer;
begin
  x1:=radius div 2;
  Canvas.Pen.Color:=Color;
  Canvas.Brush.style:=bsClear;
  Canvas.Ellipse(x-radius,y-radius,x+radius,y+radius);
end;
?

besser würde es natürlich aussehen, wenn du dir ein Bild eines Einschusslochs machst und dieses per draw auf die wand kopierst.

HTH Frank
  Mit Zitat antworten Zitat
Maddin1
(Gast)

n/a Beiträge
 
#4

Re: löcher inner wand

  Alt 3. Jan 2007, 10:45
Ah dankeschön, das mit dem Kreis werd ich ersteinmal ausprobieren, aber ich saß gestern die ganze Nacht vorm Pc und habs erfolglos versucht, irgendwie tut es mir leid aber wie soll ich das mit dem draw machen? normaler weise lass ich die bmp bilder in der nähe meiner exe weil ich nict weiß wie man diese in eine source datei einbindet. das ist also nun nicht das problem doch wie lade ich nun diese "einschusslöcher"-pics in canvas.draw ein? wenn du mir das noch sagen könntest wäre mir schon sehr geholfen...dankeschön
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: löcher inner wand

  Alt 3. Jan 2007, 11:00
Hier mal der ungefähre Ablauf, wie du es machen müsstest:
1. Neues TBitmap erstellen (bmp := TBitmap.Create
2. Mit LoadFromFile Einschussloch aus der Datei laden (bmp.LoadFromFile(<Dateiname>))
3. Die Bilder jeweils mit draw auf den Zielcanvas kopieren (Canvar.Draw(X, Y, bmp))
4. Am Ende das Bitmap wieder freigeben (bmp.Free)

- Am besten du erstellst das BMP ganz am anfang und zerstörst es bevor dein Prgm. beendet wird.
- Evtl. kannst du dir ja mal Hier im Forum suchenRessourcen angucken. Damit kannst du das Bild dann direkt in dein Prgm. einbinden. Statt LoadFromFile musst du dann lediglich LoadFromRessource verwenden.
- Bei der Syntax von Draw bin ich mir nicht 100%ig sicher. Evtl. musst du die Parameterreihenfolge vertauschen.
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Maddin1
(Gast)

n/a Beiträge
 
#6

Re: löcher inner wand

  Alt 3. Jan 2007, 11:04
vielen dank! das es nich aus einer ressource geladen wird ist denke ich nicht all zu schlimm, ich werde das dann auch alles ersteinmal ausprobieren, dankeschön nochmal^^
  Mit Zitat antworten Zitat
Maddin1
(Gast)

n/a Beiträge
 
#7
  Alt 3. Jan 2007, 14:30
ja ich bins nochmal, habe das mit den löchern hinbekommen aber
1. lassen sie sich durch andere images wegwischen
2. habe ich das programm auf einen anderen rechner geöffnet und dort sind die löcher völlig verschoben, ich habe deren koordinaten bei mir auf dem pc mit x-y der mouse.cursorpos und um das genau zu positionieren noch bei x - 34 genommen!
also im klartext Canvas.Draw(X-34, Y, bmp)

bei mir auf dem pc ist jetz ja genau aber auf anderen nicht
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: löcher inner wand

  Alt 3. Jan 2007, 17:19
Zu deinem ersten Problem:

Wenn du ein Bitmap über ein anderes Kopierst, siehst du das andere logischerwese nicht mehr. Um zu erreichen, dass das Loch von den (vmtl. weißen) Rändern nicht verdeckt wird müsstest du nur Teile des Bildes kopieren.
Das musst du entweder von Hand machen oder dir eine eine entsprechende Komponente suchen. Afaik kann das bspw. die PNG-Lib.

Zu 2:

Vermutlich ermittelst du die "globale" mausposition und nicht die des Formulars. Entweder müsstest du, wenn du mit Mouse.CursorPos... den Anstand des Formulars vom Bildschirmrand (evtl. einen 2. Bildschirm beachten) von der Cursorposition subtrahieren oder du ermittelst direkt die Mausposition vom Formularrand aus gesehen, mit den werden, die in den OnMouseMove, OnMouseDown und OnMouseUp-Ereignissen übergeben werden.
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Maddin1
(Gast)

n/a Beiträge
 
#9
  Alt 4. Jan 2007, 13:21
Also wegen der cursor position also im 2. punkt, weiß ich jetz das die auflösung des bildschirmes auf 1280x1024 gesetzt werden muss damit es nicht mehr verschoben ist.
und zum anderen ist das so das ich ja bewegliche images (als feinde) in meiner form habe und wenn diese hinter oder vor die Wand (mit den Löchern kommen) dann verschwinden die löcher. Dies wäre eigentlich noch das einzige problem neben der auflösung.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz