AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Object Inspector

Ein Thema von EWeiss · begonnen am 29. Aug 2008 · letzter Beitrag vom 31. Aug 2008
Antwort Antwort
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 21:34
Zitat von littleDave:
Hier mal meine letzten Beiträge zusammengefasst.
Danke für deine mühe.

EDIT:
Das ist erklärlich aber mein problem bleibt bestehen
Ich komme nicht an das Object (Label) was ich auf die Form gepackt habe.
Da der letzte Sender das JvDesignSurface ist.

Kann es sein das ich mich nicht exakt genug ausdrücke ?

Wenn ich auf mein Label klicke rechts oben der Button wie bei (Widget)
Dann übergebe ich die Classe abhängig vom index der im Tag deklariert ist.. in dem fall die 2

DesignClass := cClasses[TControl(Sender).Tag]; Also das Obj ist nun ein TLabel ist auch richtig bis hierher..
Das DesignPanel verwendet das Event 'JvDesignPanelGetAddClass'
procedure TMainForm.JvDesignPanelGetAddClass(Sender: TObject; var ioClass: String); Sobald ich nun das obj TLabel auf das DesignPanel geknallt habe ist das obj nicht mehr gültig
da es nun nach der erstellung den Wert 'JvDesignSurface' übernommen hat da der Sender der
die funktion 'JvDesignPanelGetAddClass' ausführt nicht das TLabel ist sondern das DesignPanel.

Wenn ich nun das Obj TLabel zum Inspector addieren will geht das aber hier nicht mehr da es ungültig ist.
Vielleicht versteht man nun besser was ich meine.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#12

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 22:56
Ach das JvDesignPanel ist das Problem

Zitat:
Kann es sein das ich mich nicht exakt genug ausdrücke ?
Ich glaub wir haben beide aneinander vorbeigeredet

Ich nehme an, du arbeitest dich mit Hilfe des Beispiels durch die Komponente. Also soweit ich das JvDesignPanel nach 10 Minuten verstanden habe (ich arbeite nicht damit, da bei mir nichts von TControl abgeleitet ist):

Beim Starten der Anwendung muss man dem Designer erst sagen, welche Komponenten überhaupt unterstützt werden sollen. Dies geschieht im Initialization-Teil der Unit:
Delphi-Quellcode:
initialization
  RegisterClass(TButton);
  RegisterClass(TLabel);
  RegisterClass(TPanel);
  RegisterClass(TImage);
So, sobald eine neue Komponente hinzugefügt werden soll, wird das "JvDesignPanelGetAddClass" - Event aufgerufen. Jetzt ist es so: wenn eine neue Komponente hinzugefügt werden soll, dann musst du den Klassennamen im Parameter var ioClass: String speichern. Wenn dieser String leer bleibt, dann wird auch keine neue Klasse erstellt. Zu diesem Zeitpunkt gibt es das neue Objekt noch nicht, da das JvDesignPanel ja noch nicht mal weiß, welcher Klassentyp überhaupt erstellt werden soll. So, nachdem das Event fertig ist, wird die neue Klasse erstellt - intern im Designer. Um dann auf eine Klasse zuzugreifen, musst du wahrscheinlich auf die Property Surface zugreifen und dich da irgendwie durchhangeln. Du kannst also in diesem Event NICHT auf das erstelle Objekt zugreifen, da es noch nicht existiert. Wahrscheinlich gibt es ein Event mit dem Namen (OnItemSelected) oder so ähnlich. Dort wirst du entweder das Item direkt als Parameter übergeben bekommen (zu 99.99999% ist es nicht Sender: TObject), oder es gibt eine Property "Selected" oder so.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 23:38
Ja ! Denke wir sind auf den richtigen weg..
Ist manchmal schwierig schriftlich etwas rüberzubringen

Ja beim Initialisieren der MainForm .. werden die Komponenten registriert.

Delphi-Quellcode:
initialization
  ADate := Now;

  TJvInspectorAlignItem.RegisterAsDefaultItem;
  TJvInspectorAnchorsItem.RegisterAsDefaultItem;
  TJvInspectorColorItem.RegisterAsDefaultItem;
  TJvInspectorTImageIndexItem.RegisterAsDefaultItem;

  RegisterClass(TImage);
  RegisterClass(TLabel);
Erst mal nur die zwei..

Sobald ich auf das Panel klicke bekommt in
procedure TMainForm.JvDesignPanelGetAddClass(Sender: TObject; var ioClass: String); ioClass den Wert TLabel als string übergeben ist auch richtig so.

Danach addiere ich das neue Objekt in der gleichen funktion
Delphi-Quellcode:
  if DesignClass <> 'then
    AddControls(TControl(Sender), DesignClass);
Delphi-Quellcode:
procedure TMainForm.AddControls(aCtrl: TControl; DisplayName: string);
var
  InspCat: TJvInspectorCustomCategoryItem;

begin
  InspCat := TJvInspectorCustomCategoryItem.Create(JvInspector1.Root, nil);
  InspCat.DisplayName := DisplayName;
  JvInspector1.Root.SortKind := iskNone;
  AddCtrl(InspCat, aCtrl);
  InspCat.Expanded := True;

end;
Delphi-Quellcode:
procedure TMainForm.AddCtrl(const Parent: TJvCustomInspectorItem; const Ctrl: TControl);
var
  InspCat: TJvInspectorCustomCategoryItem;

begin
  InspCat := TJvInspectorCustomCategoryItem.Create(Parent, nil);
  InspCat.DisplayName := Ctrl.Name + ': ' + Ctrl.ClassName;

  TJvInspectorPropData.New(InspCat, Ctrl);
end;
Und hier ist das problem wie schon gesagt ..
Er addiert zwar das richtige Caption TLabel addiert aber als Parent TjvDesignSurface

muss mal schaun ob ich mit den Tips von dir da was machen kann.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#14

Re: Problem mit Object Inspector

  Alt 29. Aug 2008, 23:50
Zitat von EWeiss:
[...]
Sobald ich auf das Panel klicke bekommt in
procedure TMainForm.JvDesignPanelGetAddClass(Sender: TObject; var ioClass: String); ioClass den Wert TLabel als string übergeben ist auch richtig so.

Danach addiere ich das neue Objekt in der gleichen funktion <--- Das ist der Fehler
Delphi-Quellcode:
  if DesignClass <> 'then
    AddControls(TControl(Sender), DesignClass);
Ich hab dir doch geschrieben, dass das neue Objekt während dem Aufruf dieser Routine NOCH NICHT existiert - daher kannst du es auch nocht nicht in den Object-Inspector hinzufügen. Sender hat eine ganz andere Bedeutung - das ist immer das Objekt, welches das Event auslöst - in diesem Fall TJvDesignSurface
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

Re: Problem mit Object Inspector

  Alt 30. Aug 2008, 00:04
Zitat von littleDave:
Zitat von EWeiss:
[...]
Sobald ich auf das Panel klicke bekommt in
procedure TMainForm.JvDesignPanelGetAddClass(Sender: TObject; var ioClass: String); ioClass den Wert TLabel als string übergeben ist auch richtig so.

Danach addiere ich das neue Objekt in der gleichen funktion <--- Das ist der Fehler
Delphi-Quellcode:
  if DesignClass <> 'then
    AddControls(TControl(Sender), DesignClass);
Ich hab dir doch geschrieben, dass das neue Objekt während dem Aufruf dieser Routine NOCH NICHT existiert - daher kannst du es auch nocht nicht in den Object-Inspector hinzufügen. Sender hat eine ganz andere Bedeutung - das ist immer das Objekt, welches das Event auslöst - in diesem Fall TJvDesignSurface
Lieber David deshalb mußt du nicht schreien..
Habe es doch nur nochmal zur vervollständigung auseinandergelegt das
man genau die reihenfolge sieht warum und wieso das problem auftritt.
Könnte ja auch für andere nützlich sein die vielleich mal vor dem gleichen problem stehen.

Habe verstanden das es noch nicht existiert.
Deshalb ja auch !!!
Zitat:
muss mal schaun ob ich mit den Tips von dir da was machen kann.
Finde aber im moment auch nicht das Event wo ich nach dem erstellen des Label
die Komponente im Inspector addieren kann.

Bin da noch am suchen

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#16

Re: Problem mit Object Inspector

  Alt 30. Aug 2008, 00:13
Ach so, das hab ich nicht gewusst, tut mir leid - da war ich wohl zu voreilig. Entschuldigung bitte.
Ich dachte, du hast das Problem immer noch, daher meine Reaktion. Ich hab gerade genau das Event gefunden, dass du suchst: OnSelectionChange
Eine Implementierung könnte so aussehen:
Delphi-Quellcode:
procedure TForm1.JvDesignPanelSelectionChange(Sender: TObject);
var obj: TObject;
begin
  // falls nichts ausgewählt wurde, abbrechen
  if length(JvDesignPanel.Surface.Selected) = 0 then
     exit;

  // das erste Objekt abrufen
  Obj := JvDesignPanel.Surface.Selected[0];
  // Sicher ist sicher, lieber nochmal überprüfen
  if Assigned(Obj) then
    if Obj is TControl then
       // Jetzt kannst du die Daten in den Objekt-Inspektor laden
       AddControls(TControl(Obj), Obj.ClassName);
end;
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

Re: Problem mit Object Inspector

  Alt 30. Aug 2008, 00:26
Zitat von littleDave:
Ach so, das hab ich nicht gewusst, tut mir leid - da war ich wohl zu voreilig. Entschuldigung bitte.
Ich dachte, du hast das Problem immer noch, daher meine Reaktion. Ich hab gerade genau das Event gefunden, dass du suchst: OnSelectionChange
Eine Implementierung könnte so aussehen:
Delphi-Quellcode:
procedure TForm1.JvDesignPanelSelectionChange(Sender: TObject);
var obj: TObject;
begin
  // falls nichts ausgewählt wurde, abbrechen
  if length(JvDesignPanel.Surface.Selected) = 0 then
     exit;

  // das erste Objekt abrufen
  Obj := JvDesignPanel.Surface.Selected[0];
  // Sicher ist sicher, lieber nochmal überprüfen
  if Assigned(Obj) then
    if Obj is TControl then
       // Jetzt kannst du die Daten in den Objekt-Inspektor laden
       AddControls(TControl(Obj), Obj.ClassName);
end;
Kein Problem ..

Das ist super hab es direkt versucht und funktioniert.
War da auch drin konnte aber nicht direkt was mit anfangen da ich keinen vergleich hatte wann die aktion ausgeführt
werden soll mit dem addieren der Controls.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

Re: Problem mit Object Inspector

  Alt 30. Aug 2008, 07:16
Hätte da noch ein paar fragen.

Ich lade die Daten über eine Ini ein
Wie kann ich nun innerhalb eines Root sagen wir mal "Splash"
einen Label und ein Image addieren so das diese nicht als Root sondern als Child addiert wird ?

Hoffe habe mich deutlisch genug ausgedrückt.

Beispiel das sind die Daten welche addiert werden.
Der Root nennt sich da Splash wo die Childer addiert werden.
sähe dann so aus ..

Delphi-Quellcode:
[Splash]
    Image1: TImage // >> addieren
    Background=Image
    Label1 : TLabel // >> addieren
    LabelAlignment=2
    LabelFont=segoe ui
    LabelFontSize=18
    LabelFontColor=#ffffff
    LabelHeight=40
    LabelWidth=300
    LabelX=250
    LabelY=440
Wie das eigentliche addieren funktioniert ist schon klar..
Delphi-Quellcode:
var
  aObj: TLabel;

begin
      case TextIndex(ItemName, ['background', 'LabelAlignment',
                                'LabelFont', 'LabelFontSize',
                                'LabelHeight',' LabelWidth',
                                'LabelX',' LabelY']) of

        0:
          begin
            ItemName := 'background';
            ATypeInfo := GeneratedTestEnum;
          end;
        1:
          begin
            aObj := Tlabel.Create(nil);
            TJvInspectorPropData.New(JvInspector1.Root, aObj,
                                 GetPropInfo(aObj, 'Font'));
            ItemName := 'LabelAlignment';
          end;
        2: ItemName := 'LabelFont';
        3: ItemName := 'LabelFontSize';
        4: ItemName := 'LabelFontColor';
        5: ItemName := 'LabelHeight';
        6: ItemName := 'LabelWidth';
        7: ItemName := 'LabelX';
        8: ItemName := 'LabelY';
      else
        Allow := False;
      end;
end;
Aber hier wird der Font für den label im Root eingefügt nicht wie "Anhang Bild 1" dargestellt als Child
Außer Root und Parent habe ich nichts gefunden gibt es da noch eine andere möglichkeit ?

Mein zweites problem ist das einbinden von einem Button innerhalb eines Item
Die einzige möglichkeit die ich gefunden habe ist über GeneratedTestEnum
Nur über ein Enum läßt sich ein Button addiern das geschieht dann im Inspector automatisch.
Das ist aber nicht der richtige weg oder?

Und das letzte warum kann ich wenn ein TImage eingebunden wird beim Eintrag Picture keine datei auswählen ?

Hab 2 Bilder angehängt zur vervollständigung.

gruss Emil
Miniaturansicht angehängter Grafiken
2_496.jpg   1_209.jpg  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

Re: Problem mit Object Inspector

  Alt 31. Aug 2008, 07:32
Niemand ne Idee wie ich die probleme lösen kann ?
So was wie Hilfeanleitungen scheinen die beim Jedi Projekt nicht zu kennen.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:29 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