Thema: Delphi Drehpoti zeichnen

Einzelnen Beitrag anzeigen

Benutzerbild von Pinki
Pinki

Registriert seit: 19. Mai 2006
Ort: Mülheim an der Ruhr
49 Beiträge
 
Delphi 5 Enterprise
 
#1

Drehpoti zeichnen

  Alt 30. Mai 2006, 21:41
Hallo,irgendwie habe ich Knoten im Kopf.Ich möchte ein Drehpoti zeichnen.(Image 40 X 40 Pixel dynamisch)
Zu der Grafik:Aussenradius 20.(Skala)
Drehknopfradius 15.
StartWinkel wählbar von 0-2*Pi in Pi/4 Schritten
Drehwinkel wählbar Pi,3*Pi/2 und 2*Pi
Ich möchte jetzt rundum bzw von StartWinkel bis EndeWinkel alle 45° bzw Pi/4 eine rote LED zeichnen auf folgenden Radianen
RadiusX1:= 19 und radius X2 etwa 16.(Siehe Codeausschnitte)
Delphi-Quellcode:
  StartWinkel := GetStartWinkel(pDat^.NullIndex);
  DrehWinkel := GetDrehWinkel(pDat^.DrehIndex);
  EndeWinkel := StartWinkel - DrehWinkel;
  if EndeWinkel < 0 then EndeWinkel := EndeWinkel + (2 * pi);
Hier kommt die LED Grafik:
Delphi-Quellcode:
        RadiusX1 := (Right-Left+1)*19 div 40 ;
        RadiusY1 := (Bottom-Top+1)*19 div 40 ;
        RadiusX2 := (Right-Left+1)*16 div 40 ;
        RadiusY2 := (Bottom-Top+1)*16 div 40 ;
        LEDWinkel := EndeWinkel;
        //Anzahl der LED´s z.B bei 180° sind es 5 Stück
        If DrehWinkel =Pi then n:=5;
        If DrehWinkel =(3*Pi/2) then n:=7;
        If DrehWinkel =(2*Pi) then n:=8;
        {n:=Trunc(DrehWinkel*4/Pi)+1;}
        DeleteObject(SelectObject(DC,OldPen));
        DeleteObject(SelectObject(DC,OldBrush));
        OldPen := SelectObject(DC,GetStockObject(Black_Pen));
        OldBrush := SelectObject(DC,CreateSolidBrush(clRed));

        for j:=1 to n do
      begin
        //Koordinate der LED
        StartX1 := Trunc(Cos(LEDWinkel)*RadiusX1);
        StartY1 := Trunc(Sin(LEDWinkel)*RadiusY1);
        EndeX1 := Trunc(Cos(LEDWinkel)*RadiusX2);
        EndeY1 := Trunc(Sin(LEDWinkel)*RadiusY2);
        //weil Cos von 90° und 270°=0 X Koordinaten um +-1 verschieben um die Mitte
        if (LEDWinkel=Pi/2) or (LEDWinkel=3*Pi/2) then
        begin
        StartX1:=StartX1+1;
        EndeX1:=EndeX1-1;
        end;
        //weil Sin von 0°,180° und 360°=0 Y Koordinaten um +-1 verschiebenum die Mitte
        if (LEDWinkel=0) or (LEDWinkel=Pi) or (LEDWinkel=2*Pi) then
        begin
        StartY1:=StartY1+1;
        EndeY1:=EndeY1-1;
        end;
        Ellipse(DC,ZentrumX+StartX1,ZentrumY-StartY1,ZentrumX+EndeX1,ZentrumY-EndeY1);
        
        LEDWinkel:=LEDWinkel+(Pi/4);//Winkel um 45° verschieben
        if LEDWinkel>(2*Pi) then LEDWinkel:=LEDWinkel-(2*Pi);
      end;
Die LED bei 0,90°,180° werden nicht dargestellt .Warum???

Grüss
Pinki
*** Cogito ergo sum ***
  Mit Zitat antworten Zitat