AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Benötige Hilfe beim Entwickeln einer Komponente
Thema durchsuchen
Ansicht
Themen-Optionen

Benötige Hilfe beim Entwickeln einer Komponente

Ein Thema von torud · begonnen am 29. Aug 2007 · letzter Beitrag vom 17. Jul 2013
Antwort Antwort
Seite 13 von 13   « Erste     3111213   
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#121

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 9. Sep 2007, 21:18
Das müsste imho auch klappen:
    SetBkMode(Canvas.Handle, TRANSPARENT); bin mir aber nicht sicher.

Gruß oki
42
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#122

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 9. Sep 2007, 22:04
Also der Border wird nun auch gezeichnent, wenn ich ein Bild habe. Komischerweise wird der Gradient nicht mehr gezeichnet. Stattdessen wird alles Schwanzr gezeichnet. Ich könnte im absoluten notfall darauf verzichten. Was soll. Kann ich´s eben nicht ändern.

Was aber komisch ist, ist, dass wenn ich das Control verlasse und auf das Formular klicke, das Control nicht neu gezeichnet wird und es die fokusierdenden Vierecke behält. Woran kann das liegen?
Danke
Tom
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#123

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 10. Sep 2007, 07:14
Moin Tom,

wer malt wann die fokusierenden Vierecke auf dein Control?
42
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#124

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 10. Sep 2007, 07:51
Moin Oki,

ich habe mir ein Beispielprojekt angelegt, wo ich von Zeit zu Zeit etwas teste. Klicke ich darin die Komponente an, wird sie natürlich fokusiert. Klicke ich aber wieder auf das Formular selbst, sollten ja die kleinen Vierecke verschwinden, die vorher fokusgerecht gezeichnet wurden.

Lege ich 2 von den Komponenten auf das Form und wechsle den Fokus zwischen den Controls, dann funktioniert das ganz gut. Ich habe es mir aber zur Laufzeit mal angesehen, da ich ja da auch dieses Control verschieben muss und in dem Fall ja auch die fokusierenden Vierecke gezeichnet werden und da ist alles ok.
Danke
Tom
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#125

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 10. Sep 2007, 08:18
Hi Tom,

über diese Erscheinung bin ich auch gestolpert. Da du SetFocus sowie die Methoden Doenter und DoExit benutzt tritt folgendes Problem auf. DoExit wird nur aufgerufen, wenn das Control und/oder der Container des Controls seinen Focus verliert. Aktivierst du per Maus den Container deines Controls, so wird nicht DoExit aufgerufen! Ich habe dieses Problem mit einem eigenen Ereignes OnSelekt gelöst. Hier werden dann zur laufzeit alle anderen Controls deselektiert. So zu sagen von Oben per Hand.
Schau mal in die Hilfe für SetFocus. Da ist das Thema Focus setzen beschrieben. Die Methoden Doenter und DoExit scheinen explizit auf den Focus zu reagieren.

Gruß oki
42
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#126

Komponente drängelt sich immer in den Vordergrund

  Alt 10. Sep 2007, 22:46
Dies wird wohl "schon" meine letzte Frage in diesem Thread sein. Ich bin nun soweit fertig und musste es einfach trennen, da ich nicht alles an Funktionalität in der Kompo unterbringen konnte...

Nun zur eigentlichen Problematik:

Die Komponente drängelt sich immer in den Vordergrund!!! Dies habe ich zum einen im FormDesigner bemerkt und auch in meinen Programmen, wo ich die Controls auch gern mal nach hinten versetze, um Controls, die dahinter liegen sichtbar zu machen. TCustomControl scheint sich nicht darum zu kümmern. Oder muss ich hierzu wieder eine spezielle Eigenschaft anlegen???

Das komische ist, dass das in den Hintergrundsetzen untereinander zwischen den TCustomControl-Komponenten funktioniert, aber wenn ich zum Beispiel ein TLabel- oder eine TImage-Komponente sehen will, oder dies auf das TCustomControl legen will (nicht als Child), so ist das nicht möglich. Sollte das grundsätzlich nicht gehen, werde ich wohl oder über auf TPanel ausweichen müssen...

//Edit
Ich sehe gerade, dass sich das TPanel genauso verhält. Gibt es das einen Weg das zu ändern? Ich habe Images und Labels, die auch in den Vordergrund zu holen sein müssen.
Danke
Tom
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 10. Sep 2007, 23:13
Hallo Tom,

ich fürchte, du wirst das nicht so einfach ändern können. Eine von TWinControl abgeleitete Komponente liegt immer über den von TGraphicControl abgeleiteten Komponenten. Letztere besitzen kein eigenes Handle und können sich nur auf dem Canvas ihres Parent-Controls darstellen. Ein möglicher Ausweg könnte aber darin bestehen, die Images und Labels auf rahmenlose Panels zu setzen und diese Panels nach vorne zu bringen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#128

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 11. Sep 2007, 09:58
Danke für Deine Antwort.

Ich habs jetzt von ner Paintbox abgeleitet, weil ich dem TImage auch keinen Rahmen auf den Canvas zeichnen durfte. Geht nur bei Bitmap - meckerte DER ständig rum...
Danke
Tom
  Mit Zitat antworten Zitat
christophww

Registriert seit: 29. Aug 2007
Ort: Hachenburg
1 Beiträge
 
#129

AW: Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 17. Jul 2013, 17:42
Das Thema ist zwar schon alt, aber da ich die Funktion DrawGradient von hier habe, will ich andere davor bewahren, in den gleichen Fehler zu laufen. Es hat Tage gedauert, bis ich verstanden habe, dass die lokale Variable c nicht initialisiert wird und deshalb der Wert von c.reserved manchmal nicht 0 ist. Dann wurde statt eines Farbverlaufs nur noch die Farbe Schwarz ausgegeben.

ALSO UNBEDINGT: c.reserved:=0;

procedure DrawGradient(const Canvas: TCanvas; Color1, Color2: TColor;
ARect: TRect; GradientOrientation: TGradientOrientation);
var
c1, c2, c: TPixelRec; //for easy access to RGB values as well as TColor value
x, y: Integer; //current pixel position to be set
OldPenWidth: Integer; //Save old settings to restore them properly
OldPenStyle: TPenStyle;//see above
begin
c1.Color := ColorToRGB(Color1); //convert system colors to RGB values
c2.Color := ColorToRGB(Color2); //if neccessary
OldPenWidth := Canvas.Pen.Width; //get old settings
OldPenStyle := Canvas.Pen.Style;
Canvas.Pen.Width:=1; //ensure correct pen settings
Canvas.Pen.Style:=psInsideFrame;

c.reserved:=0; //

case GradientOrientation of
goVertical:
begin
for y := 0 to ARect.Bottom - ARect.Top do
begin
c.r := Round(c1.r + (c2.r - c1.r) * y / (ARect.Bottom - ARect.Top));
c.g := Round(c1.g + (c2.g - c1.g) * y / (ARect.Bottom - ARect.Top));
c.b := Round(c1.b + (c2.b - c1.b) * y / (ARect.Bottom - ARect.Top));
Canvas.Brush.Color := c.Color;
Canvas.FillRect(Classes.Rect(ARect.Left, ARect.Top + y,
ARect.Right, ARect.Top + y + 1));
end;
end;
goHorizontal:
begin
for x := 0 to ARect.Right - ARect.Left do
begin
c.r := Round(c1.r + (c2.r - c1.r) * x / (ARect.Right - ARect.Left));
c.g := Round(c1.g + (c2.g - c1.g) * x / (ARect.Right - ARect.Left));
c.b := Round(c1.b + (c2.b - c1.b) * x / (ARect.Right - ARect.Left));
Canvas.Brush.Color := c.Color;
Canvas.FillRect(Rect(ARect.Left + x, ARect.Top,
ARect.Left + x + 1, ARect.Bottom));
end;
end;
end;
Canvas.Pen.Width := OldPenWidth; //restore old settings
Canvas.Pen.Style := OldPenStyle;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 13 von 13   « Erste     3111213   


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 00:15 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