![]() |
Fragen zur Komponente TPanel
Hallo,
ich habe zwei Fragen zu der Komponente TPanel. Ist es machbar, die vier Kanten eines Panels abzurunden? Falls es nicht funktioniert, welche Alternativen gibt es denn, außer das verwenden von TImage? Desweiteren möchte ich, dass mein Panel bei einem OnClick Event die Farbe verändert. Wie kann man das am besten realisieren? Lg yasR |
Re: Fragen zur Komponente TPanel
Es gibt noch TShape, wenn es darum geht eine Form auf dem Formular darzustellen.
Die Farbe kannst du via der Eigenschaft Color verändern, das funktioniert natürlich nicht ab XP, wenn der XP Style aktiv ist. Denn dann übernimmt das Betriebssystem ja das Zeichnen. |
Re: Fragen zur Komponente TPanel
Hallo,
für die abgerundeten Ecken braucht man nur über die Staatsgrenze gehen (am Bodensee gehts), nämlich zu den ![]() Es ginge auch das hier von den ![]() |
Re: Fragen zur Komponente TPanel
danke Helmi, genau das passende ;-)
aber weshalb bekomme ich hier Fehlermeldungen angezeigt? -.-
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const bgcolor = $00FFDDEE; linecolor = $00554366; var img: array of TImage; reg: hrgn; i: Integer; begin for i := 0 to ComponentCount - 1 do begin if Components[i].ClassName = 'TPanel' then begin setlength(img, Length(img) + 1); img[i] := TImage.Create(Self); img[i].Width := (Components[i] as TPanel).Width; img[i].Height := (Components[i] as TPanel).Height; img[i].Parent := (Components[i] as TPanel); img[i].Canvas.Brush.Color := bgcolor; img[i].Canvas.pen.Color := bgcolor; img[i].Canvas.Rectangle(0,0,img[i].Width, img[i].Height); img[i].Canvas.pen.Color := linecolor; img[i].Canvas.RoundRect(0,0,img[i].Width - 1,img[i].Height - 1,20,20); reg := CreateRoundRectRgn(0,0,(Components[i] as TPanel).Width, (Components[i] as TPanel).Height, 20,20); setwindowrgn((Components[i] as TPanel).Handle, reg, True); deleteobject(reg); end; end; end; ![]() |
Re: Fragen zur Komponente TPanel
Hast du die Unit ExtCtrls eingebunden?
Ansonsten ist das evtl wieder der Bug in Error Insight. |
Re: Fragen zur Komponente TPanel
Kannst du das Progrogramm kompilieren und ausführen?
Wenn ja, dann ignorier es einfach > ![]() |
Re: Fragen zur Komponente TPanel
also ExtCtrls ist auf jeden eingebunden, ich kann es nicht ausführen -.-
|
Re: Fragen zur Komponente TPanel
Welche Fehlermeldung erscheint denn?
Und in welche Zeile springt er? Was mir gerade aufgefallen ist: 'if Components[i] is TPanel then' dürfte etwas sauberer (und evtl auch sicherer) sein. |
Re: Fragen zur Komponente TPanel
[Pascal Fehler] Unit3.pas(33): E2003 Undefinierter Bezeichner: 'TImage'
[Pascal Fehler] Unit3.pas(40): E2003 Undefinierter Bezeichner: 'TPanel' [Pascal Fehler] Unit3.pas(40): E2029 Anweisung erwartet, aber 'THEN' gefunden [Pascal Fehler] Unit3.pas(43): E2018 Record, Objekt oder Klassentyp erforderlich [Pascal Fehler] Unit3.pas(44): E2066 Operator oder Semikolon fehlt [Pascal Fehler] Unit3.pas(44): E2015 Operator ist auf diesen Operandentyp nicht anwendbar [Pascal Fehler] Unit3.pas(45): E2066 Operator oder Semikolon fehlt [Pascal Fehler] Unit3.pas(45): E2015 Operator ist auf diesen Operandentyp nicht anwendbar [Pascal Fehler] Unit3.pas(46): E2066 Operator oder Semikolon fehlt [Pascal Fehler] Unit3.pas(46): E2015 Operator ist auf diesen Operandentyp nicht anwendbar [Pascal Fehler] Unit3.pas(47): E2066 Operator oder Semikolon fehlt [Pascal Fehler] Unit3.pas(48): E2066 Operator oder Semikolon fehlt [Pascal Fehler] Unit3.pas(49): E2066 Operator oder Semikolon fehlt [Pascal Fehler] Unit3.pas(49): E2250 Es gibt keine überladene Version von 'Rectangle', die man mit diesen Argumenten aufrufen kann [Pascal Fataler Fehler] Project4.dpr(5): F2063 Verwendete Unit 'Unit3.pas' kann nicht compiliert werden if Components[i] is TPanel then bringt auch kein Erfolg -.- |
Re: Fragen zur Komponente TPanel
Nochmal: steht ExtCtrls mit in der uses-Klausel?
|
Re: Fragen zur Komponente TPanel
Win32 /
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; |
Re: Fragen zur Komponente TPanel
Ist das auch die Uses-Liste aus der Unit3.pas?
|
Re: Fragen zur Komponente TPanel
ja, himitsu.
|
Re: Fragen zur Komponente TPanel
Am besten du präsentierst uns mal die komplette Unit. :wink:
|
Re: Fragen zur Komponente TPanel
Hmmm, du hast nicht zufällig irgendwo noch eine eigene ExtCtrls?
(z.B. im Projektverzeichnis eine Datei mit dem selben Namen) |
Re: Fragen zur Komponente TPanel
Es klappt jetzt doch, habe eine neue Unit erstellt die nur den Quellcode für die Rundung enthält und es klappt ;-)
Liegt wohl an einer anderen Sache, die werd ich aber dann selbst finden ^^ |
Re: Fragen zur Komponente TPanel
klappt jetzt alles schön und gut aber die Caption erscheint nicht -.-
|
Re: Fragen zur Komponente TPanel
Hallo yasR,
du solltest übrigens den Index i nicht für den Zugriff auf das Array img verwenden. Falls nicht alle Komponenten Panels sind, greifst du auf nicht vorhandene Elemente des Arrays zu, da i dann schneller wächst als die Länge des dynamischen Arrays. Abgeehen davon - das Array benötigst du eigentlich gar nicht, es genügt eine einfache Variable vom Typ TImage. Gruß Hawkeye |
Re: Fragen zur Komponente TPanel
das array ist schon wichtig, ich habe bis zu 15 Panels ;-)
|
Re: Fragen zur Komponente TPanel
Könnt ihr mir vielleicht sagen warum die Captioneigenschaft der Panels nicht funktioniert? ;-(
|
Re: Fragen zur Komponente TPanel
Hallo,
setz Caption mal testweise im Object-Inspector. Klappt es doch, liegt es an deinem Code. Hast du die betreffenden Zeilen mal durch den Debugger geschickt ? Ausserdem enthält der Original-Code einen Haufen Components[i] as TPanel
Delphi-Quellcode:
Das lässt sich auch besser debuggen.
var
Panel: TPanel; begin if if then begin Panel:= Components[i] as TPanel Heiko |
Re: Fragen zur Komponente TPanel
nein.. die Captioneingabe ist im Objektinspektor gesetzt, liegt wohl daran das TImage keine Captioneigenschaft hat.
|
Re: Fragen zur Komponente TPanel
Hallo,
natürlich hat TImage kein Caption, ist ja ein Bild ... Wazu soll das Captio denn gut sein ? reicht nicht ein Unterschrift, also im BasePanel 2 weitere, eines alClient (mit TImage drauf) und eines alBottom als Unterschrift. Heiko |
Re: Fragen zur Komponente TPanel
img[i].Canvas.TextOut und dann damit noch zentriert die (Components[i] as TPanel).Caption ausgeben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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 by Thomas Breitkreuz