![]() |
AW: Panel mit Label dynamisch erzeugen
Zitat:
Delphi-Quellcode:
Das wären die Panele. Jedes braucht jetzt noch ein Label ? Dann noch das hier hintendran hängen.
procedure TForm2.btn1Click(Sender: TObject);
var i,x,y : Integer; NewPanel : TPanel; begin x := 0; y := 0; for i := 0 TO 9 do begin NewPanel := TPanel.Create (Self); NewPanel.Name := 'art' + IntToStr(i); NewPanel.Color := clYellow; NewPanel.Caption := IntToStr(i); if (i > 0) then begin if (i mod 5) <> 0 then begin x := x + 60; end else begin x := 0; y := y + 60; end; end; NewPanel.Left := x; NewPanel.Top := y; NewPanel.Width := 60; NewPanel.Height := 60; NewPanel.OnMouseDown := MouseDown; NewPanel.Parent := Form2; NewPanel.Show; end; end;
Delphi-Quellcode:
NewLabel.Caption := **;
NewLabel.Font.Style := [fsBold]; NewLabel.Parent := NewPanel; |
AW: Panel mit Label dynamisch erzeugen
Hi alle zusammen. Ich hatte heute erstmal mit dem Frame angefangen, aber Stahli hat bei mir das Feuer wieder entfacht... :D :feuerchen:
Ich hab allerdings schon ein paar Fragen, die, hoffe ich, nicht alzu blöd sind. Zitat:
Zitat:
und zu inherited hab ich noch eine Frage: ich hab im INet ein Tut gefunden und der schreibt beim Constructor Zitat:
Zitat:
|
AW: Panel mit Label dynamisch erzeugen
Zitat:
Zitat:
Zitat:
Hier wird explizit gesagt das das geerbte Create mit dem Parameter AOwner genommen werden soll. Destroy hat keine Parameter. |
AW: Panel mit Label dynamisch erzeugen
Inherited besagt, daß man eine Funktion/Procedur aus der Elternklasse aufrufen will.
- Beim Constructor und Destruktor muß/sollte man dieses machen, damit auch die Felder der Elternklassen initialisiert und freigegeben werden. - Und in diesem Fall ist es doch so, daß hier gleichnamige Funktionen vorliegen (einmal das Create in deiner Klasse und dann das/die Create in den Klassenvorfahren) und irgendwie muß man dem Compiler ja mittteilen, welche Version man aufrufen möchte ... standardmäßig wird ja immer die letzte Version (also die in deiner eigenen Klasse Deklarierte) verwendet/aufgerufen ... und mit Inherited davor dann die aus dem Vorfahren. Wenn praktisch irgendwelche Funktionen in deiner Klasse überschrieben/verdeckt wurden, dann kannst du so die "originalen" Funktionen im Vorfahren aufrufen:
Delphi-Quellcode:
Wenn sich aber der Name und der Parametersatz des aufzurufenen Funktion mit der der aufrufenen Funktion gleichen, dann kann man auch "alles" weglassen und nur Inherited angeben.
inherited Procedurname(Parameter, Parameter2, ...);
inherited Procedurname(Parameter); inherited Procedurname; // genauso bei Constructor und Destructor Result := inherited Funktionsname(Parameter, Parameter2, ...); Result := inherited Funktionsname(Parameter); Result := inherited Funktionsname;
Delphi-Quellcode:
Wenn also dein eigener Constructor genauso aufgebaut ist, wie einer eines Vorfahren, dann reicht ein einfaches Inherited ... also solange du nicht eigene Parameter hinzugefügt hast.
inherited; // genauso bei Constructor und Destructor
Result := inherited; |
AW: Panel mit Label dynamisch erzeugen
Hier mal der gesamte Code von meiner Komponente, aber irgendwie funktioniert die nicht so, wie ich will.
1.) Bei der Funktion
Code:
sagt Delphi, dass der linken Seite nix zuzuordnen ist...
Str(ini.ReadFloat [I]etc.[/I]
2.)Dann sagt Delphi auch noch in mehreren Fällen, dass auf die Funktion "Brush" hier nicht zugegriffen werden kann. Ich wollte aber das Panel rot bzw. grün färben lassen, wie mach ich das dann, wenn nicht so? Hoffe irgendwer kann mir nochmal helfen... LG, hans ditter
Delphi-Quellcode:
unit Panel1;
interface uses SysUtils, Classes, Controls, ExtCtrls, StdCtrls, Graphics, IniFiles; type TLabeledPanel = class(TPanel) private FLabelDatum: TLabel; FLabelKurzbeschreibung: TLabel; FLabelKategorie: TLabel; FLabelBetrag: TLabel; FLabelESign: TLabel; FImage: TImage; { Private-Deklarationen } protected { Protected-Deklarationen } public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Fuellen(ID: string); { Public-Deklarationen } published { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TLabeledPanel]); end; constructor TLabeledPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); //alle Labels erstellen und Eigenschaften der Labels einstellen FLabelDatum:=TLabel.Create(Self); FLabelDatum.Parent:=Self; FLabelDatum.Width:=56; FLabelDatum.Left:=128; FLabelDatum.Top:=5; FLabelDatum.Caption:=''; FLabelKurzbeschreibung:=TLabel.Create(Self); FLabelKurzbeschreibung.Parent:=Self; FLabelKurzbeschreibung.Width:=180; FLabelKurzbeschreibung.Top:=24; FLabelKurzbeschreibung.Left:=4; FLabelKurzbeschreibung.Caption:=''; FLabelKategorie:=TLabel.Create(Self); FLabelKategorie.Parent:=Self; FLabelKategorie.Width:=180; FLabelKategorie.Top:=43; FLabelKategorie.Left:=4; FLabelKategorie.Caption:=''; FLabelBetrag:=TLabel.Create(Self); FLabelBetrag.Parent:=Self; FLabelBetrag.Width:=60; FLabelBetrag.Top:=62; FLabelBetrag.Left:=124; FLabelBetrag.Caption:=''; FLabelESign:=TLabel.Create(Self); FLabelESign.Parent:=Self; FLabelESign.Top:=62; FLabelESign.Left:=186; FImage:=TImage.Create(Self); FImage.Parent:=Self; FImage.Left:=5; FImage.Top:=62; end; destructor TLabeledPanel.Destroy; begin //alle Labels wieder freigeben FLabelDatum.Free; FLabelKurzbeschreibung.Free; FLabelKategorie.Free; FLabelBetrag.Free; FImage.Free; inherited Destroy; end; procedure TLabeledPanel.Fuellen(ID: String); var ini: TIniFile; begin ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'kontoinfo.ini'); (*Die Labels befüllen; Werte werden aus der Ini 'kontoinfo.ini' mittels dem übergebenen Wert in 'ID'*) try FLabelDatum.Caption:=DateToStr(ini.ReadDate('ID',ID,0)); FLabelKurzbeschreibung.Caption:=ini.ReadString('Kurzbeschreibung',ID,'0'); FLabelKategorie.Caption:=ini.ReadString('Kategorie',ID,'0'); Str(ini.ReadFloat('Betrag',ID,0):9:2,FLabelBetrag.Caption); if ini.ReadInteger('Art',ID,-1) = 0 then TLabeledPanel.Brush.Color:=cllime else TLabeledPanel.Brush.Color:=clred finally ini.Free; end; end; end. |
AW: Panel mit Label dynamisch erzeugen
Versuch es mal so (ungetestet):
Delphi-Quellcode:
procedure TLabeledPanel.Fuellen(ID: String);
var ini: TIniFile; s: string; begin ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'kontoinfo.ini'); (*Die Labels befüllen; Werte werden aus der Ini 'kontoinfo.ini' mittels dem übergebenen Wert in 'ID'*) try FLabelDatum.Caption:=DateToStr(ini.ReadDate('ID',ID,0)); FLabelKurzbeschreibung.Caption:=ini.ReadString('Kurzbeschreibung',ID,'0'); FLabelKategorie.Caption:=ini.ReadString('Kategorie',ID,'0'); Str(ini.ReadFloat('Betrag',ID,0):9:2,s); //Das letzte ist ein Var-Parameter FLabelBetrag.Caption := s; if ini.ReadInteger('Art',ID,-1) = 0 then Canvas.Brush.Color:=cllime //Setzen der Farbe der Zeichenfläche else Canvas.Brush.Color:=clred; Invalidate; //neu zeichnen lassen finally ini.Free; end; end; |
AW: Panel mit Label dynamisch erzeugen
hallo DeddyH...
danke für deinen Vorschlag, ich hab ihn gleich mal probiert, was du vorgeschlagen hast. Aber weder in der Unit meiner Komponente noch während der Laufzeit funktioniert das. Ich hatte auch nochmal versucht, wenn die Komponente createt wird, sie einzufärben, hat aber leider auch nicht geklappt. Hat noch jmd eine Idee? |
AW: Panel mit Label dynamisch erzeugen
Na dann einfach mal Color setzen (ohne Brush oder Canvas).
Delphi-Quellcode:
if ini.ReadInteger('Art',ID,-1) = 0 then
Color:=cllime //Setzen der Farbe else Color:=clred; |
AW: Panel mit Label dynamisch erzeugen
Hallo,
beim Panel sollte man den Wert der Eigenschaft ![]() Gruß Hawkeye |
AW: Panel mit Label dynamisch erzeugen
Richtig, da war sowas, ich kam nur nicht mehr drauf :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 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-2025 by Thomas Breitkreuz