Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi rundes "Image" (https://www.delphipraxis.net/74156-rundes-image.html)

xZise 29. Jul 2006 10:51


rundes "Image"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich wollte einen Regler basteln in einem Halbkreis auf einem Image (siehe Anhang), so das der Regler nicht aus dem Halbkreis rauskann.
Wie kann ich jetzt am einfachsten Programmieren, dass er weiß, wo der Halbkreis zuende ist?

fwsp 29. Jul 2006 10:55

Re: rundes "Image"
 
Hinterleg doch ein TShape und pass auf das er nicht rauskommt.

Edit1:
ein rundes TShape...

konda 29. Jul 2006 10:56

Re: rundes "Image"
 
Am besten du machst es mit 2 images und legst den Punkt über den Halbkreis, jetzt prüfst du immer wenn du denn Halbkreis bewegst die Pixelfarbe des unteren Bildes. Wenn sich die ändert stoppst du einfach die Bewegung. :wink:

ste_ett 29. Jul 2006 10:59

Re: rundes "Image"
 
Du könntest mit
MSDN-Library durchsuchenCreateRoundRectRgn
eine Region in Form eines Kreises erzeugen und dann mit
MSDN-Library durchsuchenCombineRegion
unten ein Teilstück entfernen.
Mit
MSDN-Library durchsuchenSetWindowRgn
setzt du eine neue Region für eine TImage-Instanz.
Jetzt kannst du auf dem Ding rummalen wie du willst. Durch die neue "Form" des Controlls kannst du nicht aus dem Kreissegment "herauszeichnen". :)

-edit-

Ok, habe die Frage etwas falsch verstanden. :p
Etwas früh am Morgen. :/

xaromz 29. Jul 2006 11:08

Re: rundes "Image"
 
Hallo,
Zitat:

Zitat von ste_ett
Ok, habe die Frage etwas falsch verstanden. :p
Etwas früh am Morgen. :/

Die Grundidee stimmt trotzdem. Mit der PtInRegion kann man nämlich schön testen, ob man noch im gültigen Bereich ist.

Gruß
xaromz

xZise 29. Jul 2006 11:13

Re: rundes "Image"
 
Lol... So früh und so fleißig... ^^

Ich hoffe es stört niemanden, aber ich habe "einfach" geguckt, ob die Entfernung zum Mittelpunkt nicht größer als der Radius ist (Ich hatte vergessen zu sagen, dass es Kreis (r ist immer gleich) ist).

Wenn das Bild 100 px breit und 50 Px hoch ist:
(Change ist eine variable ob gedrückt ist)
Delphi-Quellcode:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  setRegler(Point(50 - X,50 - Y));
end;

procedure TForm1.setRegler(Position : TPoint);
begin
  // entfernung zum Mittelpunkt
  Label3.Caption := IntToStr(Round(sqrt(IntPower(Position.X, 2) + IntPower(Position.Y, 2))));

  // Position (vom Mittelpuknkt)
  Label4.Caption := IntToStr(Position.X);
  Label5.Caption := IntToStr(Position.Y);
  // Regler zeichenen ( wenn er gezichnet werden soll)
  if (Change) and (sqrt(IntPower(Position.X, 2) + IntPower(Position.Y, 2)) <= 50) then begin
    with Image1.Canvas do begin
      Brush.Color := clGray;
      Ellipse(0,0, 100,100);
      Brush.Color := clBlack;
      Ellipse((50 - Position.X) - 3, (50 - Position.Y) - 3, (50 - Position.X) + 3, (50 - Position.Y) + 3);
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz