AGB  ·  Datenschutz  ·  Impressum  







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

Selektionsrahmen um Komponente zeichnen?

Ein Thema von I.A · begonnen am 6. Mär 2009 · letzter Beitrag vom 8. Mär 2009
Antwort Antwort
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#1

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 8. Mär 2009, 12:26
Hallo,

Den Quelltext der Unit SizeControl muss ich zunächst in Ruhe studieren. Bei dem Testprojekt zur Unit funktioniert das Vergrößern, Verkleinern und Verschieben einwandfrei. Bisher sehe ich, das erstens die Marker als Klasse mit eigenen Ereignissen realisiert sind (TSizeBtn), während meine DrawMarkers-Routine einfach einen Rahmen mit diesen Markern zeichnet.

Weiterhin dürfte die Mehode RegisterControl die Methode sein, welche die Komponente in den Designer einfügt.
Targets sind wahrscheinlich die im Designer befindlichen, also bereits eingefügten Controls. Jetzt brauch ich Zugriff auf das aktuell sekektierte, um dessen Eigenschaften beeinflussen zu können. Ich schätze, Targets[Index] ist mein Freund.

Mich hat dennoch der Ehrgeiz gepackt und daher gibt es erst mal ne kleine Revanche für Routine von Michael Linden. Ich habe die Routine DrawMarkers genannt. Michael Lindens Routine zeichnet einfach einen Rahmen. DrawMarkers zeichnet auch die Handles, die auch im Formdesigner von Delphi bei der selektierten Komponente zu sehen sind. Ich habe dazu Michael Lindens Routine einach erweitert.

Delphi-Quellcode:
procedure DrawMarkers(hdc: HDC; r: TRect; penColor: TColor);
const
  PENWIDTH = 2;

var
  Anchors: TRect;
  VertMid: Integer;
  HorzMid: Integer;
  index: Integer;
begin
  with TCanvas.Create do
  try
    Handle := hdc;
    Pen.Width := PENWIDTH;
    Pen.Color := penColor;
    InflateRect(r, PENWIDTH, PENWIDTH);
    Brush.Style := bsClear;
    //Das Rechteck als Rahmen
    Rectangle(r);
    HorzMid := (r.Right - r.Left) div 2;
    VertMid := (r.Bottom - r.Top) div 2;
    //---------- Hier werden die Marker gezeichnet -------------
    for index:=7 downto 0 do
    case index of
      7: begin
           //Links oben
           Anchors.Left := r.Left - 2;
           Anchors.Right := r.Left + 3;
           Anchors.Top := r.Top - 2;
           Anchors.Bottom := r.Top + 3;
           Rectangle(Anchors);
         end;
      6: begin
           //Mitte oben
           Anchors.Left := Anchors.Left + HorzMid;
           Anchors.Right := Anchors.Left + 4;
           Rectangle(Anchors);
         end;
      5: begin
           //Rechts oben
           Anchors.Left := r.Right - 2;
           Anchors.Right := Anchors.Left + 4;
           Rectangle(Anchors);
         end;
      4: begin
           //Rechts Mitte
           Anchors.Top := Anchors.Top + VertMid;
           Anchors.Bottom := Anchors.Top + 4;
           Rectangle(Anchors);
         end;
      3: begin
           //Links Mitte
           Anchors.Left := r.Left - 2;
           Anchors.Right := Anchors.Left + 4;
           Rectangle(Anchors);
         end;
      2: begin
           //Links unten
           Anchors.Top := r.Bottom - 2;
           Anchors.Bottom := Anchors.Top + 4;
           Rectangle(Anchors);
         end;
      1: begin
           //Unten Mitte
           Anchors.Left := Anchors.Left + HorzMid;
           Anchors.Right := Anchors.Left + 4;
           Rectangle(Anchors);
         end;
      0: begin
           //Unten rechts
           Anchors.Left := r.Right - 2;
           Anchors.Right := Anchors.Left + 4;
           Rectangle(Anchors);
         end;
    end;
    //---------- Hier wurden die Marker gezeichnet -------------
  finally
    Free;
  end;
end;
  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 02:01 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-2025 by Thomas Breitkreuz