AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Custom Property Editor Streaming

Ein Thema von mcbain · begonnen am 28. Nov 2013 · letzter Beitrag vom 2. Dez 2013
Antwort Antwort
mcbain

Registriert seit: 18. Mai 2011
50 Beiträge
 
#1

AW: Custom Property Editor Streaming

  Alt 29. Nov 2013, 09:56
Danke für den Hinweis Uwe Raabe.

Das behebt das Problem mit den doppelten Einträgen, jedoch wird immer noch nicht in die DFM geschrieben, sobald ich in meinem Property-Editor Veränderungen vornehme. Es wird erst gespeichert, wenn ich eine andere Eigenschaft verändere und speichere.

Könntest du mir auch hier weiterhelfen?
  Mit Zitat antworten Zitat
mcbain

Registriert seit: 18. Mai 2011
50 Beiträge
 
#2

AW: Custom Property Editor Streaming

  Alt 29. Nov 2013, 10:00
OK, ich hab mein Problem festgestellt.
"Alles Speichern" wird nicht getriggert in der IDE, wenn ich in meinem Property-Editor etwas an meiner Collection verändere.
Somit wird natürlich die Änderung nicht registriert und die IDE schreibt nicht in die DFM zurück, wenn ich das Projekt schließe.

Klicke ich auf "Speichern" wird schon korrekt in die DFM zurückgeschrieben.

Kann ich irgendwie "Alles Speichern" in der IDE über meinen Property-Editor triggern?

EDIT: Ah, ich glaube ich weiß woran es liegt, ich habe in meiner Collection vergessen die Methoden Update und Notify zu überschreiben. Das probiere ich gleich mal aus.

Geändert von mcbain (29. Nov 2013 um 10:05 Uhr)
  Mit Zitat antworten Zitat
mcbain

Registriert seit: 18. Mai 2011
50 Beiträge
 
#3

AW: Custom Property Editor Streaming

  Alt 29. Nov 2013, 11:50
Hmmm...funktioniert immer noch nicht.
Ich hab jetzt in SetID von TMyObject einen Change(false) eingebaut und in der Collection TMyData Notify und Update überschrieben.

Allerdings wird die Änderung immer noch nicht von der IDE registriert, wenn ich etwas an der Collection ändere.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#4

AW: Custom Property Editor Streaming

  Alt 29. Nov 2013, 12:00
Hast du bei TMyObject auch Assign überschrieben?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mcbain

Registriert seit: 18. Mai 2011
50 Beiträge
 
#5

AW: Custom Property Editor Streaming

  Alt 29. Nov 2013, 12:18
Ja, hier der Ausschnitt:
Code:
procedure TMyObject.Assign(Source: TPersistent);
begin
  if Source is TMyObject then
  begin
    FId := TMyObject (Source).FId;
  end
  else
    inherited; //raises an exception
end;

procedure TMyObject.SetID(aValue: string);
begin
  if FID <> aValue then
  begin
    FID := aValue;
    Changed(false);
  end;
end;

procedure TMyData.Notify(Item: TCollectionItem;
  Action: TCollectionNotification);
begin
  inherited;
  TMyComp(Owner).Updated;
end;

procedure TMyData.Update(Item: TCollectionItem);
begin
  inherited;
  TMyComp(Owner).Updated;
end;
Ach ja und mein Property-Editor-Formular zum Ändern der Collection sieht so aus:

Code:
procedure TMyForm.FormShow(Sender: TObject);
 if MyData <> nil then
    begin
      for i := 0 to MyData.Count -1  do
      begin
        myObject:= MyData.Items[i];
        lbx.AddItem(myObject.ClassName,myObject);
      end;
    end;
end;

procedure TMyForm.btnSaveClick(Sender: TObject);
var myObject: TMyObject;
begin
 myObject := (lbx.Items.Objects[0] as TMyObject);
 myObject .ID := '1234';
end;

Geändert von mcbain (29. Nov 2013 um 12:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Custom Property Editor Streaming

  Alt 29. Nov 2013, 12:51
Einen Propertyeditor habe ich gerade nicht zur Hand. Aber in meinem Komponenteneditor rufe ich Designer.Modified auf.
Schau mal nach einer analogen Anweisung.

Delphi-Quellcode:
procedure TssLayoutComponentEditor.ShowDesigner;
var
  DesignerForm: TFormSsLayoutEditor;
begin
  if (Component is TssLayout) then
  begin
    DesignerForm := TFormSsLayoutEditor.Create(nil);
    try
      DesignerForm.ssLayoutIDE := (Component as TssLayout);
      DesignerForm.AssignLayoutIDEtoDTE;
      DesignerForm.ShowModal;
      DesignerForm.AssignLayoutDTEtoIDE;
      DesignerForm.ssLayoutIDE := nil;
      Designer.Modified;
    finally
      DesignerForm.Free;
    end;
  end;
end;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
mcbain

Registriert seit: 18. Mai 2011
50 Beiträge
 
#7

AW: Custom Property Editor Streaming

  Alt 2. Dez 2013, 06:25
Designer.Modified war die Lösung:

Code:
procedure TMyEditor.Edit;
var lform: TMyForm;
begin
  lform := TMyForm.Create(nil);
  try
    lform.MyData:= TMyData(GetOrdValue);
    lform.ShowModal;
    Designer.Modified;

  finally
    FreeAndNil(lform);
  end
end {Edit};
Vielen Dank an stahli!
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 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