AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Objecte zwischenspeichern

Ein Thema von EWeiss · begonnen am 16. Sep 2008 · letzter Beitrag vom 22. Sep 2008
Antwort Antwort
Seite 2 von 4     12 34   
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#11

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 10:48

Wo werden die Objecte denn Kreiert/Platziert?
Da kannst doch auch zur Laufzeit die OnClick events und eine eindeutige Identifizierung (z.B. im tag) zuweisen.

Dann machst du im OnClick sowas wie
Delphi-Quellcode:
if (sender as TComponent).tag = PusteKuchen then begin
  add(Pustekuchen);
end;
und feddich;

Oder hab ich irgendwie total verpennt worums hier geht?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 10:51
Zitat von HenKst:

Wo werden die Objecte denn Kreiert/Platziert?
Da kannst doch auch zur Laufzeit die OnClick events und eine eindeutige Identifizierung (z.B. im tag) zuweisen.

Delphi-Quellcode:
if (sender as TControl).tag = PusteKuchen then begin
  add(Pustekuchen);
end;
Oder hab ich irgendwie total verpennt worums hier geht?
Wie soll ich den Tag zuweisen wenn das object noch nicht existiert
das wird doch zur Laufzeit erstellt und über die ElementType (gleichzusetzen mit Tag)
Identifiziert aber nur vom TreeView und nicht wenn ich drauf klicke.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 10:59
Hallo Stefan

Delphi-Quellcode:
procedure TMainForm.JvDesignPanelSelectionChange(Sender: TObject);
bumm???
end;
Nein hier ...
Delphi-Quellcode:
procedure TMainForm.AddControls(ATree : TBaseVirtualTree; aCtrl: TControl; DisplayName: string);
var
  Data : PTreeData;
  Node : PVirtualNode;
  UIObject : TCAVEUIObject;
begin


  UIObject := TCAVEUIObject.Create;

  Node := ATree.GetFirstSelected;
  Data := ATree.GetNodeData(Node);

  case SkinManagerInterface.ActiveScreen of
    skSplash:
    begin

    case Data.Category of
      stBackground:
      begin
        // zeigt das ausgewählte Object TImage im FInspector
        UIObject.ShowSelProperties(FInspector,aCtrl,
          ['Autosize' ,'Width', 'Height', 'Picture'], 'Background Picture');
        // zeigt Object Informationen im FInspector an
        UIObject.ShowUserObjectInfo(FInspector, FCAVEUserObject, 'Identity');
      end;
      stText:
      begin
        // zeigt das ausgewählte Object TLabel im FInspector
        UIObject.ShowSelProperties(FInspector,aCtrl,
          ['Autosize' ,'Width', 'Height',
           'Left', 'Top', 'Alignment', 'Font', 'Transparent'], 'Text');
        // zeigt Object Informationen im FInspector an
        UIObject.ShowUserObjectInfo(FInspector, FCAVEUserObject, 'Identity');
      end;
      stButton:
      begin
        // zeigt das ausgewählte Object TImage im FInspector
        UIObject.ShowSelProperties(FInspector,aCtrl,
          ['Left', 'Top', 'Width', 'Height', 'Center', 'Picture'], 'Button Picture Strip');
          Data.Image := TImage(aCtrl);
        // zeigt Object Informationen im FInspector an
        UIObject.ShowUserObjectInfo(FInspector, FCAVEUserObject, 'Identity');
      end;
     end;
     FCAVEUserObject.Name := Data.FCaption;
  end;

  end;

  // addiere Control ClassName und Name zur ComboBox
  cbObject.items.add(aCtrl.Name + ': ' + aCtrl.ClassName);

end;
und zwar dann wenn die falsche Category übergeben wird
Die kann ich aber nur auslösen bzw.. finden wenn der richtige Knoten im Tree aktiviert ist.
Ich kann den aber nicht aktivieren da ich ihn nicht kenne wenn ich auf ein object klicke.

gruss Emil
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#14

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 11:06
Zitat von EWeiss:

Wie soll ich den Tag zuweisen wenn das object noch nicht existiert
das wird doch zur Laufzeit erstellt und über die ElementType (gleichzusetzen mit Tag)
Identifiziert aber nur vom TreeView und nicht wenn ich drauf klicke.

gruss Emil
Und warum nicht?
Erstellst du das Object nicht selbst?

Ich muss zugeben ich bin durch deinen Code nicht ganz durchgestiegen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 11:12
Zitat von HenKst:
Zitat von EWeiss:

Wie soll ich den Tag zuweisen wenn das object noch nicht existiert
das wird doch zur Laufzeit erstellt und über die ElementType (gleichzusetzen mit Tag)
Identifiziert aber nur vom TreeView und nicht wenn ich drauf klicke.

gruss Emil
Und warum nicht?
Erstellst du das Object nicht selbst?
Hmm einen zusätzlichen Tag zu addieren sehe da keinen Sinn drin
da meine objecte über die Elemente identifiziert werden was macht das für einen
unterschied ob das nun über ein Array oder einen Tag geschieht.

Zitat:
Ich muss zugeben ich bin durch deinen Code nicht ganz durchgestiegen
Warum zu schlecht zu verstehen ?
Ist doch dokumentiert was wo geschieht und welche aktionen ausgeführt werden.

Mein problem ist halt die schlechte Dokumentation (oder keine) von den Jedi Komponenten
Muss mir alles aus den Units saugen um zu verstehen was da abgeht
das funktioniert aber nicht immer wenn man die eigenschaften nicht kennt.

gruss Emil
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#16

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 11:26
Zitat von EWeiss:
Hmm einen zusätzlichen Tag zu addieren sehe da keinen Sinn drin
da meine objecte über die Elemente identifiziert werden was macht das für einen
unterschied ob das nun über ein Array oder einen Tag geschieht.
Der Unterschied ist dass der Tag eindeutig zu einem Object gehört.
Wenn du also nach dem Kreieren(da weisst du ja hoffentlich noch um welches Element es grade geht^^) einen Tag und ein OnClick zuweist, weisst du über den Tag immer genau welches object du grade hast.
Du kannst ja auch den ElementType ins Tag schreiben
Ein weiterer Vorteil vom Tag ist, dass den fast alles hat was nicht direkt von TObject abgeleitet ist. Den gibts von TComponent abwärts
Zitat von EWeiss:
Warum zu schlecht zu verstehen ?
Ist doch dokumentiert was wo geschieht und welche aktionen ausgeführt werden.

Mein problem ist halt die schlechte Dokumentation (oder keine) von den Jedi Komponenten
Muss mir alles aus den Units saugen um zu verstehen was da abgeht
das funktioniert aber nicht immer wenn man die eigenschaften nicht kennt.

gruss Emil
Mein problem ist halt dass ich die Jedi Komponenten garnicht kenne
Darum ist für mich nicht klar wo die Elemente kreiert werden.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 11:38
Zitat:
HenKst: Du kannst ja auch den ElementType ins Tag schreiben
Das wäre eine möglichkeit werd es mal versuchen
Die frage nur was mache ich wenn ich unter stBackgound( Bitmap) mehrere Dateien stehen habe
dann hab ich den Typ aber immer noch nicht das Object(Image1, Image2 usw..).

Ist also nicht so einfach.

gruss Emil
  Mit Zitat antworten Zitat
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#18

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 11:56
Auf die schnelle fällt mir da ein record ein den du in den Tag schreibst.

Delphi-Quellcode:
TEnumTypeInfo = record
  TypeInfo: PTypeInfo;
  Index: Integer;
end;
Im TypeInfo steht die TypeInfo(wow...) und im Index der index des jeweiligen Elements.
Könntest dir dann nen globalen Zähler machen der immer incrementiert wird wenn ein Image kreiert wird.
Ich behaupte das wäre immernoch praktischer als ein array dessen indizes du nicht weisst^^
narf - not a real function
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 12:18
Zitat von HenKst:
Auf die schnelle fällt mir da ein record ein den du in den Tag schreibst.

Delphi-Quellcode:
TEnumTypeInfo = record
  TypeInfo: PTypeInfo;
  Index: Integer;
end;
Im TypeInfo steht die TypeInfo(wow...) und im Index der index des jeweiligen Elements.
Könntest dir dann nen globalen Zähler machen der immer incrementiert wird wenn ein Image kreiert wird.
Ich behaupte das wäre immernoch praktischer als ein array dessen indizes du nicht weisst^^
Hmmm
Gut gemeinter Ratschlag was soll ich damit machen?
Bekomme dann nur das Kind übergeben was mir aber nichts bringt.

Delphi-Quellcode:
type
  TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat,
    tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString,
    tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray);
Trotzdem Danke..

Gruss Emil
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#20

Re: Objecte zwischenspeichern

  Alt 17. Sep 2008, 12:22
Hallo Emil,

einen hab ich noch

Es besteht wohl ein Konflikt zwischen

procedure TMainForm.AddControls(ATree : TBaseVirtualTree; aCtrl: TControl; DisplayName: string); und
Delphi-Quellcode:
Node := ATree.GetFirstSelected;
Data := ATree.GetNodeData(Node);
aCtrl muss nicht zwingend identisch sein mit dem selektierten Node.

Also ein Versuch:

Den Baum und seine Knoten von oben her durcharbeiten und suchen, welcher Node vom gleichen Typ wie aCtrl ist. Diesem Node den Fokus geben, dann sollte es gehen.

Hierüber könnte es doch möglich sein, die Objekte zu vergleichen, wenn eine IF-Kaskade mit IS und AS nicht ausreicht:
Delphi-Quellcode:
{ Die Prozedur ermittelt Basis-Laufzeit-Informationen zum übergebenen Objekt   }
{ und gibt die Informationen in einer Stringliste zurück.                      }
procedure GetBaseClassInfo(AClass: TObject);
var
  ClassTypeInfo : PTypeInfo;
  ClassTypeData : PTypeData;
  EnumName : String;
begin
  ClassTypeInfo := AClass.ClassInfo;
  ClassTypeData := GetTypeData(ClassTypeInfo);
  with sl Do Begin
    Add(Format('Class Name: %s ', [ClassTypeInfo.Name]));
    EnumName := GetEnumName(TypeInfo(TTypeKind), Integer(ClassTypeInfo.Kind));
    Add(Format('Kind: %s ', [EnumName]));
    Add(Format('Size: %d ', [AClass.InstanceSize]));
    Add(Format('Defined in: %s.pas ', [ClassTypeData.UnitName]));
    Add(Format('Num Properties: %d ',[ClassTypeData.PropCount]));
  End;
end;
Wenn hier der Typ festgestellt werden kann, müsste (über ein entsprechendes Cast?) ja auch der Name des Objektes zu finden sein, um das dann im Tree zu selektieren.

Wenn nicht, dann weiß ich auch nicht weiter

Stephan
  Mit Zitat antworten Zitat
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 00:16 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