AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia TLine - Canvas an Line ausrichten
Thema durchsuchen
Ansicht
Themen-Optionen

TLine - Canvas an Line ausrichten

Ein Thema von Bjoerk · begonnen am 6. Mär 2013 · letzter Beitrag vom 9. Mär 2013
Antwort Antwort
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: TLine - Canvas an Line ausrichten

  Alt 6. Mär 2013, 19:46
Zitat:
Wenn die Linien dicker werden, dann geht das aber nicht so einfach.
Genau!!

Zitat:
Du könntest der Komponente eine Methode spendieren, die das Rechteck der Komponente entsprechend vergrössert:
Also, wenns so einfach geht wäre natürlich super. Probier ich sofort aus. Thanx! Hoffe Paint spielt dann nicht verrückt...
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TLine - Canvas an Line ausrichten

  Alt 6. Mär 2013, 20:06
Nee, das geht nicht. Wo sollte ich das auch hinschreiben? In Paint geht ja nicht. Da würde ja bei jedem Paint With und Height der Komponente vergrößert. Width und Height sind ja die von TGraphicControl geerbten. Deshalb meinte ich, man sollte die Komponente vielleicht von was ganz anderem ableiten, nur von welcher? wobei ich die Mauseereignisse schon bräuchte..
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TLine - Canvas an Line ausrichten

  Alt 7. Mär 2013, 12:09
Was mir gestern abend noch eingefallen ist, was ich brauch' nennt man wohl Autosize.

Deshalb schau ich mir gerade die TCustomLabel an, weil die auch von TGraphicControl ebgeleitet ist und ein Autosize hat (die Komponentenhöhe wird da ja auch anhand der Fontgröße gesetzt, falls Autosize true ist).

In diesem Zusammenhang ist bei mir folgende Frage aufgetaucht:
Delphi-Quellcode:
  TCustomLabel = class(TGraphicControl)
    ..
  public
    ..
    property Caption;
    property Canvas;
  end;
Die beiden Properties. Diese Syntax ist mir nicht bekannt.
Wieso weiß denn Delphi, von welchem Typ die sind?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: TLine - Canvas an Line ausrichten

  Alt 7. Mär 2013, 12:19
Die Property ist in TControl als protected implementiert und wird in TCustomLabel sichtbar gesetzt (public)

TCustomLabel/TGraphicControl/TControl
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TLine - Canvas an Line ausrichten

  Alt 7. Mär 2013, 13:02
Ok. Thanx.

Die Methode Loaded war mir auch nicht bekannt. Es geht so, wie sx2008 vorgeschlagen hat. Hab aber nicht gewußt, daß das nach Loaded rein muß. Was aber immer noch nicht geht, daß es zur Designzeit angezeigt wird.

Delphi-Quellcode:
procedure TLine.Loaded;
begin
  inherited Loaded;
  AdjustBounds;
end;

Geändert von Bjoerk ( 7. Mär 2013 um 13:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TLine - Canvas an Line ausrichten

  Alt 7. Mär 2013, 13:03
Ich würde der Komponente eigene Propertys zuweisen:
X1, Y1 ... für Point1
X2, Y2 ... für Point2
LW ... für Linienbreite
LA für LineAlign

Dann kannst Du Left, Top, With und Height die Komponente selbst berechnen lassen (veranlasst durch die Setter der neuen Propertys):

Left := Min(X1, X2) - (LW div 2);
Top := Min(Y1, Y2) - (LW div 2);
Width := Max(X1, X2) - Min(X1, X2) + (LW div 2);
Height := Max(Y1, Y2) - Min(Y1, Y2) + (LW div 2);

(so ins unreine...)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TLine - Canvas an Line ausrichten

  Alt 7. Mär 2013, 16:59
Ja Stahli, das ist für hier wirklich sehr sehr viel einfacher. Dann wird zur Designzeit auch gleich alles richtig angezeigt.

Das einzige was ich jetzt noch hab ist: Width und Height sind ja vom UrUrVorfahren. Wie kriegt denn meine Komponete mit, daß die sich geändert haben. Ich muß ja dann X1/Y1 und X2/Y2 entsprechend anpassen?

Delphi-Quellcode:
procedure TLine.SetX1(const Value: integer);
begin
  FX1 := Value;
  Left := FX1 - OffSet;
end;

procedure TLine.SetX2(const Value: integer);
begin
  FX2 := Value;
  Width := FX2 - FX1 + OffSet + OffSet;
end;

procedure TLine.SetY1(const Value: integer);
begin
  FY1 := Value;
  Top := FY1 - OffSet;
end;

procedure TLine.SetY2(const Value: integer);
begin
  FY2 := Value;
  Height := FY2 - FY1 + OffSet + OffSet;
end;

function TLine.OffSet: integer;
begin
  Result := FPen.Width div 2;
end;
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TLine - Canvas an Line ausrichten

  Alt 7. Mär 2013, 17:16
Die Setter dürften virtuell sein, aber ich würde einfach Resize überschreiben (und prüfen, ob die Änderung von deinen neuen Eigenschaften kommt oder nicht).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  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 16:10 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