Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Drehung um 90 Grad (https://www.delphipraxis.net/177222-drehung-um-90-grad.html)

Chris211183 25. Okt 2013 09:43

Drehung um 90 Grad
 
Hallo,

ich habe hier ein rectangle vom Typ TRect und darauf ist ein Frame,
nun will ich das von der Verticalen in die Horizontale drehen, dabei sollen beide (Rect und Frame) gedreht werden

hier ein Auszug

Delphi-Quellcode:
procedure THixBarGraph.Paint;
var
   R: TRect;
   H, W: Integer;
begin
  inherited paint;
  if (Parent = NIL) or not visible
  then Exit;

  Canvas.Brush.Color := FColor;
  Canvas.FillRect(Rect(0, 0, Width, Height));
  case FKind of

sbVertical :  begin
                  H := (Height) div 2;
                  W := (Width div 4) div 2;
                  R := Rect((Width div 2) - W, (Height div 2) - H,
                  (Width div 2) + W, (Height div 2) + H);
                  Frame3D(Canvas, R, clBtnShadow ,clBtnHighlight , 1);
               end;

sbHorizontal : begin
                  H := (Width div 4) div 2;
                  W := (Height div 2);
                  R := Rect((Width div 2) - W, (Height div 2) - H,
                  (Width div 2) + W, (Height div 2) + H);
                  Frame3D(Canvas, R, clBtnShadow ,clBtnHighlight , 1);
               end;

       else;
    end;

end;
wie sag ich ihm das, dass er sich um 90 Grad dreht ?

baumina 25. Okt 2013 09:53

AW: Drehung um 90 Grad
 
Ganz ehrlich : Ich kapiers bis heute noch nicht was du da so wild rumrechnest mit div 4 und div 2 und was sonst noch so.

Chris211183 25. Okt 2013 09:58

AW: Drehung um 90 Grad
 
:dp:

stahli 25. Okt 2013 10:03

AW: Drehung um 90 Grad
 
Zeig doch mal einen Screenshot von Deinem Formular und dann eine Skizze wie es Deine Komponente "gedreht" aussehen soll.

Ist da auch Text drauf oder ein Bild oder andere Controls, die mit gedreht werden sollen oder so?

baumina 25. Okt 2013 10:06

AW: Drehung um 90 Grad
 
Man muss zu dem Thema hier ein wenig diese Vorgeschichte kennen: http://www.delphipraxis.net/177088-b...ml#post1233024

Chris211183 25. Okt 2013 10:15

AW: Drehung um 90 Grad
 
kennt er !!!


:wiejetzt:

Chris211183 25. Okt 2013 10:18

AW: Drehung um 90 Grad
 
Liste der Anhänge anzeigen (Anzahl: 1)
So hier ein Screenshot, habs rot eingefärb

stahli 25. Okt 2013 10:24

AW: Drehung um 90 Grad
 
Und wie sieht es gedreht aus?
Und wie soll es gedreht aussehen?

Formuliere Deine Fragen mal präziser, sonst wird das Helfen schwerer und Du bekommst weniger Antworten... (nur so als Tipp ;-) )

Chris211183 25. Okt 2013 10:26

AW: Drehung um 90 Grad
 
es soll genauso aussehen, bloß halt "liegend" einmal umkippen :lol:

DeddyH 25. Okt 2013 10:27

AW: Drehung um 90 Grad
 
Du kannst Grafiken auch an Deinen Beitrag anhängen, dann muss man nicht erst eine PDF herunterladen. Das horizontal/vertikal soll sich nur auf den Rahmen beziehen, habe ich das richtig verstanden?

Chris211183 25. Okt 2013 10:29

AW: Drehung um 90 Grad
 
ja weiß ich, hab bloß einen Internetrechner und einen Rechner der nicht am Netz ist, daher muss ich immer switchen !

Also es Sollen sich beide drehen, einmal das Rectangle in die Horizontale und der Rahmen auch !

DeddyH 25. Okt 2013 10:33

AW: Drehung um 90 Grad
 
Bist Du sicher, dass Du das so willst? Dann hättest Du nämlich ggf. erheblichen "Freiraum" innerhalb der Komponente. Width und/oder Height neu zu setzen sollte sich von selbst verbieten, da man mit so etwas den Anwender einer Komponente in den Wahnsinn treiben kann. Also bleibt man innerhalb der im Objektinspektor festgelegten Grenzen, muss dann aber ggf. skalieren, so dass wie gesagt möglicherweise eine Menge Platz bleibt.

Chris211183 25. Okt 2013 10:36

AW: Drehung um 90 Grad
 
wie meinst Du das, im Prinzip soll das Ding eine Messanzeige sein, was ich später einmal horizontal oder vertikal in meine Form packen möchte, die Abmaße sollen immer gleich bleiben...
Theoretisch würde es ja reichen, wenn ich die koordinaten der Horizontalen tausche, so müsste es vertikal angezeigt werden, machter aber nicht...

DeddyH 25. Okt 2013 10:40

AW: Drehung um 90 Grad
 
Nimm Dir mal ein Blatt Papier in DIN A4. Da malst Du ein Rechteck drauf mit ca. 1/4 Blattbreite und voller Blatthöhe und schneidest es aus. Bekommst Du diesen Ausschnitt nun komplett auf ein anderes A4-Blatt, wenn Du ihn um 90 Grad drehst?

Chris211183 25. Okt 2013 10:46

AW: Drehung um 90 Grad
 
nein

DeddyH 25. Okt 2013 10:48

AW: Drehung um 90 Grad
 
Und da liegt eben das Problem, sobald die Komponente nicht quadratisch ist. Soll gestaucht, skaliert oder abgeschnitten werden? Diese Frage musst Du Dir zuerst selbst beantworten, bevor man Dir adäquat helfen kann.

Chris211183 25. Okt 2013 10:51

AW: Drehung um 90 Grad
 
Liste der Anhänge anzeigen (Anzahl: 1)
ok, ich hab das mal nachgemalt

soll so dann aussehen

einmal Vertikal und einmal horizontal

Chris211183 25. Okt 2013 10:52

AW: Drehung um 90 Grad
 
die Abmaße sollen sich bei der Drehung nicht verändern

stahli 25. Okt 2013 10:57

AW: Drehung um 90 Grad
 
Vielleicht liegt ein grundsätzliches Missverständnis vor?

Du kannst eine Komponente (z.B. ein Memo oder halt auch Deine) nicht einfach drehen.
Du kannst eine Komponente nur sehr hoch und schmal oder sehr breit und flach zeichnen und den Inhalt anpassen. Somit dreht sie sich optisch, tatsächlich ändert sie aber nur die höhe und Breite und zeichnet den Inhalt neu.

Dann kannst Du so etwas machen wie
Delphi-Quellcode:
if Height >= Width then
  RahmenImHochformatZeichnen
else
  RahmenImQuerformatZeichnen;
Hilf das irgendwie?

Chris211183 25. Okt 2013 11:01

AW: Drehung um 90 Grad
 
ja glaub auch,

ich versuchs mal

Chris211183 25. Okt 2013 11:44

AW: Drehung um 90 Grad
 
geht alles nicht..........:kotz:

CarlAshnikov 25. Okt 2013 12:31

AW: Drehung um 90 Grad
 
Zitat:

Zitat von Chris211183 (Beitrag 1233160)
geht alles nicht..........:kotz:

Ich liebe solche pauschalen Aussagen...

Ich aber vorhin etwas herumprokrastiniert:

Delphi-Quellcode:
procedure THixBarGraph.Paint;
var
   R: TRect;
   H, W: Integer;
   lAbstand: integer;
begin
  inherited paint;
  if (Parent = NIL) or not visible
  then Exit;

  Canvas.Brush.Color := clRed;
  Canvas.FillRect(Rect(0, 0, Width, Height));
  if Width < height then
  begin
    lAbstand := min(height div 2, FAbstand);
    H := (Height) div 2;
    W := (Width div 4) div 2;
    R := Rect((Width div 2) - W, lAbstand,
    (Width div 2) + W, Height - lAbstand);
    Frame3D(Canvas, R, clBtnShadow ,clBtnHighlight , 1);
  end
  else
  begin
    lAbstand := min(Width div 2, FAbstand);
    H := (Width div 2);
    W := (Height div 4) div 2;
    R := Rect(lAbstand, (Height div 2) - W,
     Width - lAbstand, (Height div 2) + W);
    Frame3D(Canvas, R, clBtnShadow ,clBtnHighlight , 1);
  end;
end;
Einfach die gewünschte Höhe und Breite von dem Bargraph einstellen, dann wird das automatisch gezeichnet. Müsste natürlich noch aufgeräumt werden. Fabstand verändert die Länge des Balkens in der Mitte.

Chris211183 29. Okt 2013 12:44

AW: Drehung um 90 Grad
 
Hey,

danke Dir, hab das mal alles angepasst und jetzt macht er auch, das was ich wollte ! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 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