TTIPropertyGrid > inhalt updaten
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
TTIPropertyGrid > inhalt updaten
Hallo,
ich möchte gerne den inhalt einer TTIPropertyGrid updaten habe alle proceduren die ich finden konnte probiert aber leider ohne erfolg!
mein ziel ist es die werte abzudaten.
fvt.TIObject:=selobject;
fvt.PropEditLookupRootChange;
fvt.RefreshPropertyValues;
fvt.Clear;
writeln('test');
fvt.Update;
fvt.Invalidate;
fvt.Refresh;
diese proceduren habe ich getestet !
ich möchte gerne den inhalt einer TTIPropertyGrid updaten habe alle proceduren die ich finden konnte probiert aber leider ohne erfolg!
mein ziel ist es die werte abzudaten.
fvt.TIObject:=selobject;
fvt.PropEditLookupRootChange;
fvt.RefreshPropertyValues;
fvt.Clear;
writeln('test');
fvt.Update;
fvt.Invalidate;
fvt.Refresh;
diese proceduren habe ich getestet !
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Sodele pluto,
dann bau Dir mal ein kleines Programm. Leg auf das Formular ein Panel und setz Align = alLeft, dann zieh das etwas breiter und setz auf das Panel eine TMemo und setz Align = alClient. Dann setzt Du TIPropertyGrid neben das Panel und setzt Align = alClient. Setz das OI auf Panel1 und erzeuge das Event OnModified. Da kopierst Du den Code von dem Beispiel aus :
procedure TForm1.TIPropertyGrid1Modified(Sender: TObject);
einfach komplett rein. Sieh Dir mal an was das macht und bastel einfach weiter dran rum. Das sollte schon etwas helfen.
cu Hardy
dann bau Dir mal ein kleines Programm. Leg auf das Formular ein Panel und setz Align = alLeft, dann zieh das etwas breiter und setz auf das Panel eine TMemo und setz Align = alClient. Dann setzt Du TIPropertyGrid neben das Panel und setzt Align = alClient. Setz das OI auf Panel1 und erzeuge das Event OnModified. Da kopierst Du den Code von dem Beispiel aus :
procedure TForm1.TIPropertyGrid1Modified(Sender: TObject);
einfach komplett rein. Sieh Dir mal an was das macht und bastel einfach weiter dran rum. Das sollte schon etwas helfen.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
ComCtrls, RTTIGrids, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
TIPropertyGrid1: TTIPropertyGrid;
procedure TIPropertyGrid1Modified(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.TIPropertyGrid1Modified(Sender: TObject);
var
cname: String;
i: Integer;
begin
//
Memo1.Clear;
cname:= '------------------------';
Memo1.Append(cname);
cname:= 'Objekt-Type: ' + TIPropertyGrid1.TIObject.ClassName;
Memo1.Append(cname);
cname:= 'Objekt-Name: ' + TIPropertyGrid1.TIObject.GetNamePath;
Memo1.Append(cname);
Memo1.Append('');
Memo1.Append('geändertes Property');
Memo1.Append('');
cname:= TIPropertyGrid1.GetActiveRow.Name;
cname:= ' ' + cname + ':' + TIPropertyGrid1.CurrentEditValue;
Memo1.Append(cname);
cname:= '----------------';
Memo1.Append(cname);
cname:= 'Property-Liste';
Memo1.Append(cname);
cname:= '----------------';
Memo1.Append(cname);
for i:= 0 to TIPropertyGrid1.RowCount - 1 do begin
cname:= TIPropertyGrid1.Rows[i].Name;
cname:= cname + ':' + TIPropertyGrid1.Rows[i].LastPaintedValue;
Memo1.Append(cname);
end;
end;
initialization
{$I unit1.lrs}
end.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
der code fügt doch nur einer Memo komponente daten hinzu wenn ich es richtig deute !
ich habe folgendes problem:
ich verschiebe rechte ecke auf eine paintbox diese rechtecke sind objekte mit eigenschaften. Nun möchte ich das sich sobalt ich das objekte verschiebe oder sich die größe verändert die daten entsprechend updaten im OI beim onMouseMove und genau das liegt mein problem ich hoffe diese beschreibung hilft euch weiter !
ich habe folgendes problem:
ich verschiebe rechte ecke auf eine paintbox diese rechtecke sind objekte mit eigenschaften. Nun möchte ich das sich sobalt ich das objekte verschiebe oder sich die größe verändert die daten entsprechend updaten im OI beim onMouseMove und genau das liegt mein problem ich hoffe diese beschreibung hilft euch weiter !
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Also sowas, jetzt verhundst er mir auch noch das Beispiel.
Der zeigt Dir die Propertys von dem verbundenen Objekt an und gibt Im Kopf das geänderte Property mit neuem Wert aus.
So, und wenn Du nun das Objekt anklickst, dann machst ein OnKeydown und trägst dann das Objekt im PropertyGrid als das verbundene Obhekt an. Ab dem Augenblich zeigt er dir die Propertys von dem Teil, wenn das verschiebts ändern sich auch die Daten. Da mußt du garnix groß machen.
Der zeigt Dir die Propertys von dem verbundenen Objekt an und gibt Im Kopf das geänderte Property mit neuem Wert aus.
So, und wenn Du nun das Objekt anklickst, dann machst ein OnKeydown und trägst dann das Objekt im PropertyGrid als das verbundene Obhekt an. Ab dem Augenblich zeigt er dir die Propertys von dem Teil, wenn das verschiebts ändern sich auch die Daten. Da mußt du garnix groß machen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
naja bei mir ändern sich die werte im OI erst wenn ich erneut drauf klicke aus das entsprechne objekt !
ich habe ein neues problem beim OI:
ich wollte ein BitMap einbinden das sieht so aus:
ich habe ein neues problem beim OI:
ich wollte ein BitMap einbinden das sieht so aus:
sobalt ich das programm starte und auf den image klicke im OI dann öffnet sich das dialog wie erwartet nur wenn ich dann auf load oder save gehe kommt eine AV(zugriefs verletztung).... kann mir jemmand sagen was ich falsch mache ?unit uextras;
{$mode objfpc}{$H+}
interface
uses
LCLIntf, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,StdCtrls,upaint2ObjBase,uPaint2Object;
type
{ tImageListB }
tImageListB = class(TPaint2Object)
public
fImage:TBitmap;
constructor Create;
private
function getImage: TBitmap;
procedure setImage(const AValue: TBitmap);
published
property Image:TBitmap read getImage write setImage;
end;
implementation
constructor tImagelistB.Create;
begin
Name:='ImagelistB';
fimage:=TBitmap.Create;
inherited Create;
end;
function tImageListB.getImage: TBitmap;
begin
result:=fImage
end;
procedure tImageListB.setImage(const AValue: TBitmap);
begin
fimage:=aValue;
end;
end.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Hmmm, ich hab mir abgewöhnt im Konstruktor Create etwas vor dem inherited zu initialisieren. Bei Delphi hat der die Dinger oft wieder zurückgesetzt und hat dabei mich auf den Topf gesetzt.
Ich vermute mal streng, dein fimage ist nil, deswegen die Zugriffsverletzung.
Ich vermute mal streng, dein fimage ist nil, deswegen die Zugriffsverletzung.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Man kann sowas machen, dazu mußt Du dir von dem TBitmap ne neue Klasse ableiten:
TMyBitmap = class(TBitmap)
end;
und mußt dann die Propertys die du anzeigen willst einfach im published wiederholen. Das muß aber dann ohne Typangabe passieren, also einfach nur:
property PropName;
TMyBitmap = class(TBitmap)
end;
und mußt dann die Propertys die du anzeigen willst einfach im published wiederholen. Das muß aber dann ohne Typangabe passieren, also einfach nur:
property PropName;
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)