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
Seite 2 von 2     12   
Benutzerbild von _frank_
_frank_

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

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 7. Mär 2009, 18:18
alternativ mit dem richtigen Namen nochmal googlen...der 3. Treffer bringt dich direkt auf die Seite der Komponente

Gruß Frank
  Mit Zitat antworten Zitat
I.A

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

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 8. Mär 2009, 01:45
@_frank: Da war die Auskunft von @Hawkeye219 wesentlich hilreicher. Ohne den Punkt am Ende klappte es. Nur muss man das erst mal wissen.

Danke @Hawkeye219. Jetzt klappt es wirklich, ohne den Punkt hinten.

Werde mir jetzt sowohl die SizeCtrls holen, als auch @MichaelLinden-s neue Version für den Rahmen.
Experimentieren werde ich aber erst nach einer Runde Schlaf, damit ich müder Sack dann ausgeschlafen und mit frischem Elan die Quelltexte studieren und an einer eigenen Lösung basteln kann. Kann ich dann gerne hier reinstellen.
  Mit Zitat antworten Zitat
I.A

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

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 8. Mär 2009, 13: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
Seite 2 von 2     12   


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:07 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