Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fragen zur Komponente TPanel (https://www.delphipraxis.net/140861-fragen-zur-komponente-tpanel.html)

yasR 27. Sep 2009 19:35


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

jaenicke 27. Sep 2009 20:21

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.

Helmi 27. Sep 2009 20:29

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 Schweizern
Es ginge auch das hier von den Schweizern

yasR 28. Sep 2009 07:42

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;





http://www.bilder-hochladen.net/files/big/cn1k-1.jpg

mleyen 28. Sep 2009 07:48

Re: Fragen zur Komponente TPanel
 
Hast du die Unit ExtCtrls eingebunden?
Ansonsten ist das evtl wieder der Bug in Error Insight.

himitsu 28. Sep 2009 07:53

Re: Fragen zur Komponente TPanel
 
Kannst du das Progrogramm kompilieren und ausführen?
Wenn ja, dann ignorier es einfach
> http://www.delphipraxis.net/internal...049314#1049314

yasR 28. Sep 2009 08:10

Re: Fragen zur Komponente TPanel
 
also ExtCtrls ist auf jeden eingebunden, ich kann es nicht ausführen -.-

mleyen 28. Sep 2009 08:15

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.

yasR 28. Sep 2009 08:40

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 -.-

DeddyH 28. Sep 2009 08:54

Re: Fragen zur Komponente TPanel
 
Nochmal: steht ExtCtrls mit in der uses-Klausel?

yasR 28. Sep 2009 08:59

Re: Fragen zur Komponente TPanel
 
Win32 /



uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;

himitsu 28. Sep 2009 09:05

Re: Fragen zur Komponente TPanel
 
Ist das auch die Uses-Liste aus der Unit3.pas?

yasR 28. Sep 2009 09:06

Re: Fragen zur Komponente TPanel
 
ja, himitsu.

mleyen 28. Sep 2009 09:08

Re: Fragen zur Komponente TPanel
 
Am besten du präsentierst uns mal die komplette Unit. :wink:

himitsu 28. Sep 2009 09:10

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)

yasR 28. Sep 2009 09:22

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 ^^

yasR 28. Sep 2009 09:32

Re: Fragen zur Komponente TPanel
 
klappt jetzt alles schön und gut aber die Caption erscheint nicht -.-

Hawkeye219 28. Sep 2009 09:32

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

yasR 28. Sep 2009 09:40

Re: Fragen zur Komponente TPanel
 
das array ist schon wichtig, ich habe bis zu 15 Panels ;-)

yasR 28. Sep 2009 10:20

Re: Fragen zur Komponente TPanel
 
Könnt ihr mir vielleicht sagen warum die Captioneigenschaft der Panels nicht funktioniert? ;-(

hoika 28. Sep 2009 10:27

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:
var
  Panel: TPanel;
begin
  if
    if then
    begin
      Panel:= Components[i] as TPanel
Das lässt sich auch besser debuggen.


Heiko

yasR 28. Sep 2009 10:29

Re: Fragen zur Komponente TPanel
 
nein.. die Captioneingabe ist im Objektinspektor gesetzt, liegt wohl daran das TImage keine Captioneigenschaft hat.

hoika 28. Sep 2009 12:00

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

himitsu 28. Sep 2009 12:36

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