Autor |
Beitrag |
Jakane
      
Beiträge: 257
|
Verfasst: Mo 13.05.13 12:03
Hallo liebe Delphi-Helfer
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161:
| unit JPanel;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, JEdit, JLabel, JButton;
type TJPanel = class(TCustomPanel) private NachCreate: Boolean; FMassMax: Integer; FMassMin: Integer; FFensterpfad: String; function GetAlign: TAlign; procedure SetAlign(Value: TAlign); function GetFensterpfad: String; procedure SetFensterpfad(Value: String); protected procedure Click; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property Align: TAlign read GetAlign write SetAlign; property Caption; property Color; property Cursor; property Hint; property Left; property Name; property Tag; property Top; property Visible; property MassMax: Integer read FMassMax write FMassMax; property MassMin: Integer read FMassMin write FMassMin; property Fensterpfad: String read FFensterpfad write FFensterpfad; end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('Jakane', [TJPanel]); end;
constructor TJPanel.Create(AOwner: TComponent); var Pfad : String; f, c : Integer; begin inherited; ControlStyle := ControlStyle - [csSetCaption]; Text:= ''; Alignment:= taLeftJustify; BorderWidth:= 10; NachCreate:= True; if FFensterpfad <> '' then begin FFensterpfad:= FFensterpfad; end; end;
destructor TJPanel.Destroy; begin inherited Destroy; end;
procedure TJPanel.Click; var f : Integer; ControlVisible : Boolean; JPanelVisible : Boolean; begin ControlVisible:= True; if Align in [alTop, alBottom] then begin if Height = MassMax then Height:= MassMin else Height:= MassMax; if Height = MassMax then ControlVisible:= True else ControlVisible:= False; end; if Align in [alLeft, alRight] then begin if Width = MassMax then Width:= MassMin else Width:= MassMax; if Width = MassMax then ControlVisible:= True else ControlVisible:= False; end; For f:= 0 to ControlCount - 1 do begin JPanelVisible:= False; if Controls[f].ClassType = TJButton then JPanelVisible:= TJButton(Controls[f]).JPanelVisible; if Controls[f].ClassType = TJEdit then JPanelVisible:= TJEdit(Controls[f]).JPanelVisible; if Controls[f].ClassType = TJLabel then JPanelVisible:= TJLabel(Controls[f]).JPanelVisible; if not JPanelVisible then begin Controls[f].Visible:= ControlVisible; end; end; end;
function TJPanel.GetAlign: TAlign; begin Result:= inherited Align; end;
procedure TJPanel.SetAlign(Value: TAlign); begin inherited Align:= Value; Text:= ''; if Align in [alTop, alBottom] then begin if (MassMin = 0) AND (MassMax = 0) then begin MassMax:= 40; MassMin:= 20; end; end; if Align in [alLeft, alRight] then begin if (MassMin = 0) AND (MassMax = 0) then begin MassMax:= 200; MassMin:= 30; end; end; end;
function TJPanel.GetFensterpfad: String; begin Result:= FFensterpfad; end;
procedure TJPanel.SetFensterpfad(Value: String); var Pfad : String; f, c : Integer; begin FFensterpfad:= Value; if FFensterpfad <> '' then begin FFensterpfad:= FFensterpfad; end; end;
end. |
Wie man sehen kann habe ich 3 eigene Objektvariablen: MassMin, MassMax und Fensterpfad
In der Programmierzeit belege ich diese Werte vor, entweder per Ereignis oder manuell.
Aber wenn ich dann Create oder SetAlign auf die Werte prüfe sind diese grundsätzlich 0 oder leer  erst wenn das Formular richtig gestartet ist könnte ich die Werte auslesen, aber ich brächte sie schon vorher.
Mach ich was falsch oder muss ich irgendwas noch einstellen?
Danke für Hilfen 
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Mo 13.05.13 12:34
Da haste wohl Pech
Zur Laufzeit muss ja erstmal das Create() ausgeführt werden, damit das Objekt überhaupt existiert. Erst danach werden die Werte nach und nach gesetzt. Wenn ich mich recht erinnere, gibt es aber die Methode Loaded, die netterweise aufgerufen wird, sobald das erledigt wurde. Hier müssten also die ganzen Eigenschaften, die zur zur Designzeit eingestellt hast, korrekt gesetzt sein.
P.S.: "Programmierzeit" habe ich in dem Kontext noch nicht gehört. Dient das zur Gehaltsabrechnung?
|
|
Jakane 
      
Beiträge: 257
|
Verfasst: Mo 13.05.13 12:42
jfheins hat folgendes geschrieben : | Da haste wohl Pech
Zur Laufzeit muss ja erstmal das Create() ausgeführt werden, damit das Objekt überhaupt existiert. Erst danach werden die Werte nach und nach gesetzt. Wenn ich mich recht erinnere, gibt es aber die Methode Loaded, die netterweise aufgerufen wird, sobald das erledigt wurde. Hier müssten also die ganzen Eigenschaften, die zur zur Designzeit eingestellt hast, korrekt gesetzt sein.
P.S.: "Programmierzeit" habe ich in dem Kontext noch nicht gehört. Dient das zur Gehaltsabrechnung? |
Nö, für mich gibts die Programmierzeit und die Laufzeit, die richtigen Begriffe kenn ich da grad nicht.
Wie mach ich das mit dem Loaded?
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Mo 13.05.13 12:43
Wenn ich es richtig verstehe, möchtest Du beim Aufrufen des Objektinspektors die Eigenschaften Massmin und Massmax belegen können. Eigentlich sollte das doch möglich sein. Du hast die Property belegt, und das im published-Bereich der Klasse. Damit sollten im Objektinspektor die Eigenschaften erscheinen. Schaue dort doch mal nach.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Jakane 
      
Beiträge: 257
|
Verfasst: Mo 13.05.13 12:49
Tranx hat folgendes geschrieben : | Wenn ich es richtig verstehe, möchtest Du beim Aufrufen des Objektinspektors die Eigenschaften Massmin und Massmax belegen können. Eigentlich sollte das doch möglich sein. Du hast die Property belegt, und das im published-Bereich der Klasse. Damit sollten im Objektinspektor die Eigenschaften erscheinen. Schaue dort doch mal nach. |
Nein, nicht richtig verstanden
Im Inspektor sind diese ja schon belegt (mit 20 oder 40 meistens) aber beim Starten dann läd er zuerst 0 und nach dem Create dann erst irgendwann die 20/40
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mo 13.05.13 13:43
Wieso belegst Du die privaten Felder nicht einfach im Konstruktor vor? Und die Zeilen mit
Delphi-Quelltext 1:
| FFensterpfad:= FFensterpfad; |
irritieren mich ein wenig, was willst Du denn damit bezwecken? Mal abgesehen davon, dass es für den Fensterpfad einen Setter gibt, dieser aber nicht benutzt wird.
|
|
Jakane 
      
Beiträge: 257
|
Verfasst: Mo 13.05.13 14:30
FFensterpfad:= FFensterpfad; ist nur für den debugger als sprung punkt... -.-
Die Felder sind schon vorbelegt, würde der Konstruktor ( gehe vom Create aus ) das nicht blind überschreiben?
Ich brauche die Werte die ich eingetragen habe 
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mo 13.05.13 14:37
Du meinst die Werte, die im Objektinspektor eingetragen und damit in der *.dfm gespeichert wurden? Die stehen wie bereits gesagt in der Loaded-Methode zur Verfügung.
[edit] Nachtrag: Link [/edit]
|
|
Jakane 
      
Beiträge: 257
|
Verfasst: Mo 13.05.13 15:19
[edit] Nachtrag: Link [/edit][/quote]
Lange Rede, Kurzer Sinn
Danke für den Link.
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Mo 13.05.13 17:09
Gut, mag sein, dass die Abfolge der Belegung der Variablen erst nach der Create-Prozedur erfolgt, was ja auch irgendwie logisch ist, denn es muss das Objekt ja erst erzeugt werden, sozusagen als konkreter Speicherbereich, bevor man diesem Werte zuweisen kann. Kannst Du denn überhaupt sinnvoll auf ein Objekt zugreifen, wenn es noch gar nicht geladen ist? Wenn das Objekt geladen ist, dann hast Du doch die selbst gewählten Werte. Warum benötigst Du diese, bevor das Objekt geladen ist? Das würde mich mal interessieren?
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Jakane 
      
Beiträge: 257
|
Verfasst: Di 14.05.13 15:35
für mich gab es zu dem zeitpunkt nach nichts was nach dem create kommt ausser das destroy.
also wirst du auf deine frage keine antwort bekommen ^^
ich lern schliesslich noch
|
|
|