Objektinspektor: Features

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Objektinspektor: Features

Beitrag von MmVisual »

Hallo,

Ich habe zwei Idee für ein neues Feature im Objektinspektor:

Direkt rechnen im Objektinspektor:
Folgende Funktion:
Oft hat man das Problem dass ein Feld z.B. xxx Pixel größer sein soll. Wenn man nun im Objektinspektor eingeben könnte:
Bild2.png
Bild2.png (463 Bytes) 765 mal betrachtet
Und dann die Enter-Taste drückt um die Daten zu übernehmen, dann sollte er das erkennen und 21+5 rechnen und als Ergebnis 26 im Objektinspektor stehen.

Dynamische Zuweisung von Variablen bei Eigenschaften im Objektinspektor:
Dies ist wohl extrem komplex, da diese Berechnung zur Laufzeit erfolgen sollte und nicht nur in der IDE.
Zur Funktion: Man weist in einem Objektinspektor eine Variable zu und wenn sich der Wert ändert so überträgt sich dieser in das Objekt. In diesem Beispiel wird die Width gleich dem Height gesetzt.
Bild1.png
Bild1.png (968 Bytes) 765 mal betrachtet
Ich denke Vorschlag 1 sollte recht einfach um zu setzen sein.

Vielen Dank

VG Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Objektinspektor: Features

Beitrag von MmVisual »

Wegen 1)
Ich habe einmal im Lazarus Code etwas gestöbert und habe im Code vom Objektinspektor die Zuweisung gefunden:
Bild1.png
Bild1.png (17.35 KiB) 744 mal betrachtet
Wenn ich GetOrdValueAt() weiter verfolge, so kommt man schlussendlich zu dynamisch zugeordneten Methodenaufrufen.

Code: Alles auswählen

AMethod.Code:=PropInfo^.GetProc
Wo jetzt die eigentliche Wandlung vom Eingabetext in eine Zahl erfolgt habe ich nun nicht mehr gefunden.

Hier ein Demo-Code wie das mit dem +/- funktionieren würde:

Code: Alles auswählen

Procedure TForm1.Edit1KeyPress(Sender: TObject; Var Key: char);
Var sl: TStringList;
  s: String;
  i, k: Integer;
Begin
  If Key <> #13 Then Exit;
  s := Edit1.Text;
  sl := TStringList.Create;
  sl.add('0');
  While s <> '' Do
  Begin
    If s[1] In ['0'..'9'] Then
      sl[sl.Count - 1] := sl[sl.Count - 1] + s[1]
    Else If s[1] In ['+', '-'] Then
    Begin
      sl.Add(s[1]);
      sl.Add('0');
    End;
    Delete(s, 1, 1);
  End;
  i := 0;
  k := 0;
  While sl.Count > 0 Do
  Begin
    If sl[0] = '+' Then
      k := 1
    Else If sl[0] = '-' Then
      k := 2
    Else Begin
      Case k Of
      1: i := i + StrToInt(sl[0]);
      2: i := i - StrToInt(sl[0]);
      Else i := StrToInt(sl[0]);
      End;
    End;
    sl.Delete(0);
  End;
  Edit1.Text := IntToStr(i);
  FreeAndNil(sl);
end;
EleLa - Elektronik Lagerverwaltung - www.elela.de

PascalDragon
Beiträge: 955
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Objektinspektor: Features

Beitrag von PascalDragon »

MmVisual hat geschrieben: So 21. Nov 2021, 08:33 Dynamische Zuweisung von Variablen bei Eigenschaften im Objektinspektor:
Dies ist wohl extrem komplex, da diese Berechnung zur Laufzeit erfolgen sollte und nicht nur in der IDE.
Zur Funktion: Man weist in einem Objektinspektor eine Variable zu und wenn sich der Wert ändert so überträgt sich dieser in das Objekt. In diesem Beispiel wird die Width gleich dem Height gesetzt.
Hier ist vor allem das Problem, dass Eigenschaften keine Push-Benachrichtigungen geben, wenn sie sich ändern (in diesem konkreten Fall könnte man das zwar über ein OnSizeChange oder so abfangen, aber der generelle Punkt bleibt). Das heißt es müsste etwas aktiv die Eigenschaft kontinuierlich abfragen oder die Komponente müsste ordentliche Observer Schnittstellen implementiert haben, auf die etwas lauschen kann (auch wenn dann nur bekannt ist, dass sich was geändert hat, aber nicht was).

In Delphi gibt es aber seit XE2 etwas, das in eine ähnliche Richtung geht: LiveBindings. Ein Beispiel dazu hier (Beschreibung ist zwar für FireMonkey, geht aber auch mit der VCL).
FPC Compiler Entwickler

Antworten