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 2 von 13     12 3412     Letzte »    
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 29. Aug 2007, 08:17
TCustomControl verfügt bereits über einen Canvas, Du musst also keinen eigenen erzeugen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
oki

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 29. Aug 2007, 08:41
Verschiebe die Procedure Paint; override; in der Klassendeklaration in den Bereich protected. Hat aber nichts mit der Fehlermeldung zu tun. Darauf hat schon DeddyH geantwortet.

Wie gesagt, keinen neuen Canvas erzeugen; einfach in den vorhandenen Canvas zeichnen self.canvas. ...

Gruß oki
42
  Mit Zitat antworten Zitat
torud

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 29. Aug 2007, 09:06
Ok das funktioniert jetzt schon mal. Allerdings wird mir der Hintergrund nur dann eingefärbt, wenn ich den Text schreibe. Und dann auch nur in dem Teil, wo ich den Text schreibe. hat das einen Grund?

Ich habe den Code mal so abgeändert, da ich dachte, dass das was bringen könnte...Muss ich vielleicht den Bereich noch definieren, in dem gezeichnet werden soll?

Delphi-Quellcode:
procedure TmyPanel.Paint;
begin
    Canvas.Brush.Style := bsSolid;
    Canvas.Brush.Color := FBgColorFrom;
    //Canvas.TextOut(1,1,'Test');
end;
Ich hoffe ihr entschuldigt meine teilweise laienhaften Fragen...
Danke
Tom
  Mit Zitat antworten Zitat
torud

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 29. Aug 2007, 11:05
Ok, damit gehts jetzt. Werde mich also weiter mit Canvas und der Erstellung von Komponenten beschäftigen...

Delphi-Quellcode:
procedure TmyPanel.Paint;
var
  Rect : TRect;
begin
  Rect := GetClientRect;
    Canvas.FillRect(Rect);
    Canvas.Brush.Style := bsSolid;
    Canvas.Brush.Color := FBgColorFrom;
    //Canvas.TextOut(1,1,'Test');
end;
Könnte man auch schon im Vorfeld feste Bilder mit in die Komponente einpflegen, die man dann einfach nur noch auswählen müsste?
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 29. Aug 2007, 11:36
Hallo Torud,

Du kannst der Komponente z.B. ein TImage hinzufügen und im Contructor dieses erzeugen und positionieren. Wenn Du es unter public definierst kannst Du jederzeit darauf zugreifen:

MyPanel1.Image.Picture.LoadFromFile...

Dann hat Dein Bild ein eigenes Handle und "überlagert" quasi Dein Panel. Es fängt dann auch Mausklicks ab und die kannst z.B. auf das OnClick-Ereignis reagieren.

Die andere Variante ist, irgendwelche Bilddaten (wo immer Dui die herholst) einfach auf das Canvas Deines Panels zu kopieren. (Geht, glaube ich mit Canvas.CopyRect oder so)
Dann gehört das Bild unmittelbar zu Deinem Panel und ein Klick darauf entspricht einem Klick auf Deinem Panel. Der Zeiuchenfläche ist es ja egal, ob Du irgendwechsen Text darauft abbildest oder irgendwelche Punkte eines Bildes...

Stahli
  Mit Zitat antworten Zitat
oki

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 29. Aug 2007, 11:42
Text hat andere Hintergrundfarbe:
entweder du weist dem Canvas generell die Hintergrundfarbe deines Controls zu
Delphi-Quellcode:
procedure TBaseCustomControl.Paint;
begin
  inherited;
  Canvas.Font.Assign(self.Font);
end;
oder du machst den Hintergrund des Textes transparent.
Delphi-Quellcode:
    TextRect := Rect(2, 2, self.Width-2, TitleHeight-2);
    SetBkMode(Canvas.Handle, TRANSPARENT);
    DrawText(self.Canvas.Handle, PChar(FCaption), -1, TextRect,
      DT_CENTER or DT_VCENTER or DT_SINGLELINE);
Gruß oki
42
  Mit Zitat antworten Zitat
torud

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 30. Aug 2007, 05:56
Hallo Wissende,

ich habe nun noch folgendes versucht und weiters noch diese Probleme:

-Die Farben sind noch nicht vorbelegt, sondern einfach alle mit clBlack...
-Wenn ich die Farben zur Designzeit im OI ändere, passiert rein gar nichts in der Komponente...Paint wird also nicht ausgelöst
-Ich habe FAlign : TAlign; hinzugefügt, damit ich auch diese Eigenschaft nutzen kann, aber wenn ich im OI diese Eigenschaft ändere reagiert wie Komponente auch nicht. Muss ich dass selbst implementieren? Wenn ja, wie kann ich dass Ereignis abfangen, dass ich da im OI von alNone auf alClient gewechselt habe?
Danke
Tom
  Mit Zitat antworten Zitat
oki

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 30. Aug 2007, 06:09
Moin Torud,
nichts leichter als das. Verpasse dem Property eine Setter-Methode und lasse beim Setzen das Control neu zeichnen.
Delphi-Quellcode:
type
  TmyPanel = class(TCustomControl)
  private
    FBgColorFrom : TColor;
    FBgColorTo : TColor;
    procedure SetBgColorFrom(Value : TColor);
    procedure SetBgColorTo(Value : TColor);
  published
    property BgColorFrom : TColor read FBgColorFrom write SetBgColorFrom;
    property BgColorTo : TColor read FBgColorTo write SetBgColorTo;
  end;

procedure TmyPanel.SetBgColorFrom(Value : TColor); // Settermethode
begin
  If Value = FBgColorFrom then Exit; // wenn gleiche Farbe nichts tun
  FBgColorFrom := Value; // Farbe abspeichern
  Invalidate; // Control neu zeichnen
end;

procedure TmyPanel.SetBgColorTo(Value : TColor);
begin
  If Value = FBgColorTo then Exit;
  FBgColorFrom := Value;
  Invalidate;
end;
Praktisch heisst das jetzt, immer wenn du dein Property BgColorFrom veränderst, wird nicht direkt in FBgColorFrom geschrieben, sondern die Settermethode SetBgColorFrom aufgerufen und der neue Farbwert übergeben. Das läuft übrigens automatisch.
Sind die Farben unterschiedlich, so wird FBgColorFrom gesetzt und mit Invalidate das Control veranlasst sich neu zu zeichnen.

Gruß oki
42
  Mit Zitat antworten Zitat
torud

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 30. Aug 2007, 06:27
Geiler Effekt.

Er zeigt mir jetzt immer die vorletzte Farbe an. Ich schaue nochmal drüber. Ich wollte da eh noch was mit Const vorbelegen, wenns geht. Ich suche mal weiter...Aber ansonsten hast du mit Deiner Antwort schon arg geholfen. Ich werde den Tipp direkt versuchen wür das Aligner-Problem zu benutzen...
Danke
Tom
  Mit Zitat antworten Zitat
oki

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

Re: Benötige Hilfe beim Entwickeln einer Komponente

  Alt 30. Aug 2007, 06:42
Hi,

mit dem Align bin ich mir jetzt nicht sicher wie weit TCustomControl das umsetzt. Wenn du die Eigenschaft öffentlich machen möchtest reicht folgendes:
Delphi-Quellcode:
published
  property Align;
end;
Das mit der vorletzten Farbe kann ich nicht nachvollziehen.
Ach ja, Farbe vorbelegen: im Constructor
  FBgColorFrom := clblue; Gruß oki
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 13     12 3412     Letzte »    


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 06:49 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