![]() |
Re: Objecte zwischenspeichern
Danke schön werd es mal testen und bescheid geben ob ein Erfolg zu verzeichnen ist.
gruss Emil |
Re: Objecte zwischenspeichern
Hab jetzt eine lösung gefunden na ja nicht das aller beste aber es funktioniert
Dank an HenKst hab es mit dem Tag und unter Hilfe von Stephan doch noch geschaft.
Delphi-Quellcode:
Um nicht einen neuen Thread zu erstellen eine Frage hinterher ;)
function TCAVESkinManager.GetSelectedCategory(ObjectList: TStringList; TreeView: TBaseVirtualTree; Obj: TObject): TCAVEElementType;
var Data : PTreeData; // Zeiger auf die Structur SearchData : PTreeData; // Zeiger auf die Structur Tag : Integer; // wird addiert zum Object wenn erstellt begin // Daten zurücksetzen Data := nil; // raus hier wenn kein Tag im Object vorhanden if TControl(Obj).tag = 0 then begin Result := stNone; exit; end; New(SearchData); Tag := TControl(Obj).tag; // Index out of bound von ObjectList verhindern dec(Tag); begin // Caption übergeben ermittelt über ObjectList.Index // verglichen mit dem im Obj übergebenen Tag SearchData^.FCaption := ObjectList.strings[Tag]; FFoundNode := nil; // Callback IterateSubTree aufrufen TreeView.IterateSubTree (nil, FSkinTreeCallBack, pointer(SearchData)); // Eintrag gefunden .. CategoryNode zuweisen if Assigned(FFoundNode) then begin // Node an die class TCAVESkinManager übergeben CategoryNode := FFoundNode; // Structur Daten aktualisieren Data := TreeView.GetNodeData(CategoryNode); end; end; Result := Data.Category; end; Wie kann ich jetzt übergreifend für alle Obj ein MouseEvent übergeben Das existiert ja nicht bei der erstellung zur Laufzeit. übergreifend (für alle die gleiche) Oder sollte man das aufteilen ? gruss Emil |
Re: Objecte zwischenspeichern
Hallo Emil,
hat Dein Objekt ein OnMouseDown? Dann beim Erstellen des Objektes diesem Attribut eine Methode zuweisen. Die musst Du irgendwo implementieren, wievielen Objekten Du sie letztlich zuweist, ist dabei vollkommen schnuppe. Sowas in der Art könnte Dir helfen:
Delphi-Quellcode:
Stephan
type
TfmMain = class(TForm) ... procedure miBerichteClick(Sender: TObject); ... private ... implementation ... procedure TfmMain.miBerichteClick(Sender : TObject); Begin If Sender Is tMenuItem Then With Sender As tMenuItem Do Begin ShowMessage(Name + ' ' + Caption + ' ' + IntToStr(Tag)); End; End; ... Obj.Create(wieauchimmer); ... // Ereignisroutine zuweisen Obj.OnMouseDown := fmMain.miBerichteClick; ... |
Re: Objecte zwischenspeichern
Zitat:
Denk das kann ich genause für Move und Down verwenden lediglich das Click Event auf down und move verändern gruss Emil |
Re: Objecte zwischenspeichern
Zitat:
Das OnClick kannst du doch genauso zuweisen. Haben TPicture und TLabel, soweit ich mich erinnere, beide ;) Zitat:
|
Re: Objecte zwischenspeichern
Zitat:
Delphi-Quellcode:
usw...
Obj.OnMouseDown := fmMain.miBerichteMouseDown;
Obj.OnMouseMove := fmMain.miBerichteMouseMove; Obj.OnMouseUp := fmMain.miBerichteMouseUp; procedure miBerichteMouseDown(Sender: TObject.. bla bla); //was halt noch zu dem Event MouseDown gehört haben uns da wohl falsch verstanden .. Gruss Emil |
Re: Objecte zwischenspeichern
Hallo Emil,
nä, lieber nicht. So würde beim Drücken der Maustaste das Ereignis ausgelöst, beim Festhalten und beim Loslassen. Okay, aller Guten Dinge sind drei, aber hier ist das wohl übertrieben. Du musst schon entscheiden, wann die Anwendung des Ereignisses vom Programmablauf her sinnvoll ist. Klickst Du eine Komponente an, um sie zu verschieben, muss das Ereignis eventuell noch nicht ausgelöst werden, sondern erst, wenn das Objekt an der neuen Stelle ist, weil Du z. B. seine neue Position wissen möchtest. Wenn es sich um die TLabels und TImages handelt, dann ist eventuell auch die Benutzung von onDoubleClick sinnvoller, kommt halt auf die Aufgabe an. Stephan |
Re: Objecte zwischenspeichern
Zitat:
Ich benötige diese ereignisse ;) Jedoch nicht im Design mode wenn du ein object verschiebst oder änderst. Nur wenn Preview eingeschaltet ist werden diese Events ausgelößt. Ich prüfe also vorher im MouseMove oder anderen Event ob
Delphi-Quellcode:
Ich brauche die teile da ich ein ImageStrip einlade das nachher mit den Events
JvDesignPanel.Active := Active1.Checked;
geblittet wird. Ich hoffe das es funktioniert :) gruss Emil |
Re: Objecte zwischenspeichern
@Stephan
habe das mal getestet beomme aber das von dir benannte event nicht weder onMouseMove ,Down noch ein anderes. kann es also aObj nicht zuweisen.
Delphi-Quellcode:
gruss Emil
procedure TCAVEUIObject.ShowSelProperties(Inspector: TJvInspector;
aObj: TObject; Props: array of string; NodeText: string); var i : integer; Category: TJvInspectorCustomCategoryItem; begin Inspector.Root.Clear; Category := TJvInspectorCustomCategoryItem.Create(Inspector.Root, nil); Category.DisplayName := NodeText; Inspector.Root.SortKind := iskNone; for i:=Low(Props) to High(Props) do TJvInspectorPropData.New(Category, aObj, GetPropInfo(aObj, Props[i])); if aObj.classname = 'TImage' then tmpImage := TImage(aObj); Category.Expanded := True; end; |
Re: Objecte zwischenspeichern
Mal zum Verständis.
Du Rufst im OnMouseDown Event TCAVEUIObject.ShowSelProperties(bla, sender, bla,bla) auf? Aber im Event kommst du garnicht erst an? Parent und alles richtig gesetzt? (Das is meistens bei mir das problem wenn objecte nicht da sind^^) Ich habs grade getestet und hab(nachdem ich dann endlich auch den parent richtig gesetzt hatte :D ) wunderbar ein zur laufzeit erzeugtes TImage übers Onclick wieder gefreet, indem ich den sender im OnMouseDown einer free prozedur übegeben habe. Wüsste also nicht wieso das bei dir nicht klappen sollte. Es sei denn du hast halt den Parent nicht gesetzt^^ Vielleicht ist dir das ja nicht aufgefallen. TImage und TLabel sind ja beide nicht zu sehen solange nichts drin ist :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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