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 1 von 2  1 2      
I.A

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

Selektionsrahmen um Komponente zeichnen?

  Alt 6. Mär 2009, 09:54
Hallo?

Gibt es eine einfache Möglichkeit, den Selektionsrahmen, der zur Entwurfszeit um die ausgewählte Komponente gezeichnet wird, zur Laufzeit als Rahmen zu verwenden?

Das hier:
Label1.ComponentState := csDesigning; führt nicht zum Ziel, da ComponentState einen Nur lesen Eigenschaft ist.

Einer meiner Computerfreunde will das mit der LCL nutzen, sich aber nicht erst hier registrieren.

Da ich davon ausgehe, das die LCL Interface-Kompatibel zur VCL ist, stelle ich diese Frage hier.

Mein PC Freund Axel will einen Designer für das Gute Alte Turbo Vision bauen, hierzu aber mit Lazarus und der LCL den Designer bauen. Um das Ergebnis mit dem Guten Alten Turbo Vision verwenden zu können, erzeugt der Designer am Ende passenden Quelltext. Eine Formulardatei .lfm wird nicht erzeugt.

Er lässt fragen, wieviele alte Turbo Vision Programme noch verwendet werden und eine "Frischzellenkur" gebrauchen könnten. Dann würde er nicht nur Ouelltext für das alte Turbo Vision im Designer erzeugen lassen, sondern zusätzlich einen Wrapper bauen, der das Turbo Vision Interface nachbildet, die Implementation jedoch mit der LCL realisiert. Dann könnten diese alten Programme auf Windoes portiert werden.

Wie viele Interessenten gibt es da schätzungsweise?

Bitte entschuldigt die exotische Frage, aber für Axel hat der Designer nur Sinn, wenn dieser Wrapper am Ende für die Allgemeinheit von Nutzen ist. Das dabei eine Designer für die alte DOS Version als Nebeneffekt entstehen würde, ist eher zweitrangig. So viele nutzen auch im FreeDOS-Bereich diese Objekte nicht mehr.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 6. Mär 2009, 10:07
Zitat:
Gibt es eine einfache Möglichkeit, den Selektionsrahmen, der zur Entwurfszeit um die ausgewählte Komponente gezeichnet wird, zur Laufzeit als Rahmen zu verwenden?
nimm ein TShape das du normalerweise auf visible:=false setzt und wenn du es brauchst über dein Objekt legst und sichtbar machst.

Ist am einfachsten denke ich.

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 6. Mär 2009, 11:35
Zitat von I.A:
..einen Designer für das Gute Alte Turbo Vision bauen...Wie viele Interessenten gibt es da schätzungsweise?...
Vermutlich keinen einzigen, der dafür einen sinnvollen Einsatzzweck hat. Das "gute alte" TurboVision hatte sowieso kaum einer eingesetzt. Wer es doch getan hat, der wird sich wohl über das kurz danach erschienene Delphi geärgert haben.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 6. Mär 2009, 14:30
du kannst dir ja mal die Komponenten TStretchhandle und TSizeCtrl anschauen, sind zwar beide VCL-Controls, aber evtl. kannst du diese in die LCL portieren.
Bei TsizeCtrl wär ich auch interessiert, da diese Komponente mächtiger ist und ich sie in meinem DFM-Editor verwende. leider verwendet diese aber auch ein paar WinApi-Tricks, welche das portieren nach linux schwieriger machen würden.

HTH Frank
  Mit Zitat antworten Zitat
I.A

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

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 7. Mär 2009, 12:58
Hallo,


Ich hab das jetzt so hier gelöst:
Delphi-Quellcode:
procedure Decorate(hdc: HDC; r: TRect; penColor: TColor);
const
  PENWIDTH = 2;
begin
  with TCanvas.Create do
  try
    Handle := hdc;
    Pen.Width := PENWIDTH;
    Pen.Color := penColor;
    InflateRect(r, PENWIDTH, PENWIDTH);
    Brush.Style := bsClear;
    Rectangle(r);
  finally
    Free;
  end;
end;

procedure TForm1.Label1MouseEnter(Sender: TObject);
begin
  //Selektionsrahmen zeichnen
 with Sender as TLabel do
    Decorate(GetDC(Handle), BoundsRect, clHighlight);
end;

procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
  //Selektionsrahmen löschen
  {
with Sender as TLabel do
    Decorate(GetDC(Handle), BoundsRect, self.Color);}

end;

procedure TForm1.Label1Click(Sender: TObject);
begin
{
  FShape := TShape.Create(self);
  FShape.Left := Label1.Left - 2;
  FShape.Top  := Label1.Top  - 2;
  FShape.Width := Label1.Width + 2;
  FShape.Height := Label1.Height + 2;
  FShape.Parent := self;



  }

end;
Die letzte Version, die mit TShape verdeckt mir leider meine Labelbeschriftung, womit ja die Komponente verdeckt wäre. Die Prozedut Decotate funktioniert gut.

@Hansa: Schade, ich musste Axel die unschöne Kunde überbringen. Damit hat sich aber auch der Designer erledigt, für den er, nicht ich, den Selektionsrahmen gebraucht hätte. In die Lazarusquellen einzusteigen, das dauert einfach zu lange, um daraus eine Lösung zu extrahieren. Axel wir sich ein neues Projekt überlegen.

Habe mir die Jedis mal angesehen. Da sind auch Formdesigner, Objektinspektor u.a. dabei. Aber wozu braucht man das noch. CodeGear und das Lazarusteam können doch Anwendungsdesigner echt besser programieren, als unsereiner, der sich jetzt in die Jedis erst mal einarbeiten muss.


@_frank_: Ich habe trotzdem mal per GExperts Grep Suche nach TSizeCtrls und TStretchHandle gesucht, aber leider ohne Erfolg. Dann gegoogelt und TStretchHandle gefunden und runtergeladen. Werde mir den Quelletext trotz allem mal ansehen. TSizeCtrls hab ich gar nicht gefunden, da gibt mir auch Google keine Auskunft. Egal, jetzt guck ich mir mal den Quelltext von TStretchHandle an. Irgenwie hat mich der Ehrgeiz gepackt, obwohl wohl andere so einen Anwendungsdesigner besser hinkriegen werden, als ich.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 7. Mär 2009, 14:40
Zitat von I.A:
@_frank_: ... TSizeCtrls hab ich gar nicht gefunden, da gibt mir auch Google keine Auskunft. Egal, jetzt guck ich mir mal den Quelltext von TStretchHandle an. Irgenwie hat mich der Ehrgeiz gepackt, obwohl wohl andere so einen Anwendungsdesigner besser hinkriegen werden, als ich.
schau nochmal hin...die Komponente heist TSizeCtrl (ohne s) dann wirst du auch bei google fündig...die gibt es bei www.angusj.com/delphi . TSizeCtrl unterstützt z.b. de Align-eigenschaft richtig (aktiviert die handles nur an den sinnvollen stellen) und macht das control nicht größer durch "Unterschieben" eines anderen controls zu darstellung der Handles. bei letzteren weis ich jetzt nicht, ob das bei TStretchhandle war...hatte aber mal eine Komponente die genau das gemacht hatte, und da gabs Probleme beim Form-Layout.

btw. warum der Umweg über getdc? TLabel hat doch schon ein canvas-property...

Gruß Frank
  Mit Zitat antworten Zitat
Micha88
(Gast)

n/a Beiträge
 
#7

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 7. Mär 2009, 14:42
Zitat von matashen:
Zitat:
Gibt es eine einfache Möglichkeit, den Selektionsrahmen, der zur Entwurfszeit um die ausgewählte Komponente gezeichnet wird, zur Laufzeit als Rahmen zu verwenden?
nimm ein TShape das du normalerweise auf visible:=false setzt und wenn du es brauchst über dein Objekt legst und sichtbar machst.

Ist am einfachsten denke ich.

Gruß Matthias
Die Idee ist zwar gut und das Ergebnis ist auch sehr gut, nur ich glaube, dass das bei größeren Projekten schwer zu handlen ist.
  Mit Zitat antworten Zitat
Micha88
(Gast)

n/a Beiträge
 
#8

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 7. Mär 2009, 14:52
Ich habe die Lösung da oben mal etwas umgeschrieben, ob es für jeden sinnvoll ist weis ich nicht:

Delphi-Quellcode:
{
iPw: PenWidth kann nun bei jedem Control selbst mitgegeben werden.
iSp: Spacing, Abstand vom Control nach links und rechts.
iPd: Padding, Abstand vom Control nach oben und unten.
}

procedure Decorate(hdc: HDC; r: TRect;
 penColor: TColor; iPw, iSp, iPd: ShortInt); // Änderung: iPw, iSp, iPd
begin
  with TCanvas.Create do
  try
    Handle := hdc;
    Pen.Width := iPw;
    Pen.Color := penColor;
    InflateRect(r, iSp, iPd);
    Brush.Style := bsClear;
    Rectangle(r);
  finally
    Free;
  end;
end;

procedure TForm1.Label1MouseEnter(Sender: TObject);
begin
 with Sender as TLabel do
  Decorate(GetDC(Handle), BoundsRect, clHighlight, 1, 10, 20);
end;

procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
 with Sender as TLabel do
  Decorate(GetDC(Handle), BoundsRect, self.Color, 1, 10, 20);
end;
  Mit Zitat antworten Zitat
I.A

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

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 7. Mär 2009, 15:49
Zitat von _frank_:
Zitat von I.A:
@_frank_: ... TSizeCtrls hab ich gar nicht gefunden, da gibt mir auch Google keine Auskunft. Egal, jetzt guck ich mir mal den Quelltext von TStretchHandle an. Irgenwie hat mich der Ehrgeiz gepackt, obwohl wohl andere so einen Anwendungsdesigner besser hinkriegen werden, als ich.
schau nochmal hin...die Komponente heist TSizeCtrl (ohne s) dann wirst du auch bei google fündig...die gibt es bei www.angusj.com/delphi. TSizeCtrl unterstützt z.b. de Align-eigenschaft richtig (aktiviert die handles nur an den sinnvollen stellen) und macht das control nicht größer durch "Unterschieben" eines anderen controls zu darstellung der Handles. bei letzteren weis ich jetzt nicht, ob das bei TStretchhandle war...hatte aber mal eine Komponente die genau das gemacht hatte, und da gabs Probleme beim Form-Layout.

btw. warum der Umweg über getdc? TLabel hat doch schon ein canvas-property...

Gruß Frank
Hab grad den Link angeklickt: Error 404.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Selektionsrahmen um Komponente zeichnen?

  Alt 7. Mär 2009, 16:49
Hallo,
Zitat von I.A:
Hab grad den Link angeklickt: Error 404.
entferne mal den letzten Punkt aus der Adresse, dann klappt das.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:27 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