AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie bastelt man einen einfachen Formular-Editor?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie bastelt man einen einfachen Formular-Editor?

Ein Thema von Wormid · begonnen am 30. Okt 2003 · letzter Beitrag vom 17. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#1

Wie bastelt man einen einfachen Formular-Editor?

  Alt 30. Okt 2003, 14:08
Hello Leute,

ist es mit einem vertretbarem Aufwand möglich, einen kleinen Formular-Editor für den Anwender zu erstellen?
Er soll bei weitem nicht den Funktionsumfang einer echten IDE haben, aber ich möchte "dem User" die Möglichkeit geben, die Größe der Form (das ist einfach) festzulegen und ihn dann beliebig Buttons und Labels darauf platzieren lassen. Dabei sollen die Buttons z.B. so ähnlich wie in der Delphi-IDE verschieb- und resizebar sein. Die weiteren Eigenschaften liessen sich ja dann über Dialoge (Aufruf via Kontextmenü) bearbeiten.

Hat jemand nee Idee, oder nen Ansatzpunkt (oder nen Link für ne Lektüre) für sowas?

Gruß

Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#2

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 30. Okt 2003, 14:31
Machbar wäre das.

Zum Verschieben könntest du OnMouseDown ein Flag setzen, dass nu verschoben werden soll. und dann on Mousemove Left und Top des Elements in Relation zur Mausbewegung ändern und OnMouseup das Flag wieder wegnehmen. Beim Resize ähnlich, nur müsstest du hier die genaue Position des Mousedown abfragen, weil das ja nur am äusseren Rand passieren soll.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 30. Okt 2003, 17:22
Moin Wormid,

nimm mal ein Formular, leg einen Button drauf und dann kommen in MouseDown, bzw. MouseUp des Button folgende Zeilen:

Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  SendMessage(Button1.Handle,WM_SYSCOMMAND,$F012,0);
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  SetCapture(self.Handle);
end;
Jetzt drück mal die Linke Maustaste auf dem Button, und Beweg' die Maus.

Vielleicht kannst Du ja was damit anfangen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 30. Okt 2003, 17:30
Das ist schonmal ziemlich gut!

Da werde ich mich dann mal ein bisschen ausführlicher mit auseinandersetzten.


Gruß

Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 30. Okt 2003, 17:45
Oder ist es insgesamt vielleicht einfacher, das ganze z.B. per DrawFrameControl direkt auf das Canvas der Form zu zeichen? Also gar nicht erst Controls erstellen, sondern einfach nur Zeichnen.
Wäre das vielleicht einfacher?
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#6

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 30. Okt 2003, 18:45
Zitat von Christian Seehase:
Moin Wormid,

nimm mal ein Formular, leg einen Button drauf und dann kommen in MouseDown, bzw. MouseUp des Button folgende Zeilen:

Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  SendMessage(Button1.Handle,WM_SYSCOMMAND,$F012,0);
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  SetCapture(self.Handle);
end;
Jetzt drück mal die Linke Maustaste auf dem Button, und Beweg' die Maus.

Vielleicht kannst Du ja was damit anfangen.
Was ist wenn man jetzt dem Button eine OnClick procedure verpassen will?
Bei mir führt er sie nicht aus!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 30. Okt 2003, 19:11
Moin Citybreaker,

das war nur eine Idee.
Ob die für jetzt wirklich für einen Formular-Editor geeignet ist, hab' ich nicht weiter getestet.

Workaround: [CTRL]+Linke Maustaste = Designmode

Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if not (ssCtrl in Shift) then exit;
  ReleaseCapture;
  SendMessage(Button1.Handle,WM_SYSCOMMAND,$f012,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('CLICK');
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 31. Okt 2003, 10:34
Moinsen,

ich habe dann mal aus Christians vorschlag ein "Projekt1" erstellt... Das erstellen und verschieben der Buttons funzt nun wunderbar - hat jetzt noch jemand ne Idee, wie ich das mit dem Resizen der Buttons hinbekommen kann?

Gruß

Wormid
Angehängte Dateien
Dateityp: zip dynbtn.zip (201,2 KB, 49x aufgerufen)
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#9

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 31. Okt 2003, 10:36
Probiers mal mit den DSNSys-Komponenten..
Da ist auch ein ObjectInspector dabei..Und auskennen tu ich mich damit auch etwas. Könntest also auch bei Problemen Fragen..
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Wie bastelt man einen einfachen Formular-Editor?

  Alt 31. Okt 2003, 10:54
Ich kann zwar jetzt nicht viel zu deinem edit prob sagen...nur dass du vielleicht die property 'ComponentState' missbrauchen könntest und auf 'scDesigning' setzen, dann hasst du schonmal ein flag, bzw. werden sie vielleicht auch anders gezeichnet etc.

Aber du musst die formulare ja auch speichern...da hätt ich vielleicht einen kleinen leckerbissen für dich, mit dem du deine forms als dfm-text (oder binary) speichern und laden kannst:

Delphi-Quellcode:

{ -- Author: max hub (aka maximov alias maximus) - 2003 --}

unit dmService;

interface

uses classes, sysUtils, TypInfo;


function SaveCompoToFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
function LoadCompoFromFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;


implementation



function SaveCompoToFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
var Stream1:TMemoryStream;
    Stream2:TMemoryStream;
      format : TStreamOriginalFormat;
begin
  result := false;
  format := sofText;
  Stream1 := TMemoryStream.Create;
  Stream2 := TMemoryStream.Create;
  try
    Stream1.WriteComponent(aCompo);
    Stream1.Position := 0;
    if not asBinary then
    begin
      format := sofText;
      ObjectBinaryToText(Stream1,Stream2,format);
    end else Stream1.SaveToStream(Stream2);
    Stream2.SaveToFile(FileName);
    result := true;
  finally
    Stream1.Free;
    Stream2.Free;
  end;
end;


function LoadCompoFromFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
var FileStream:TFileStream;
    MemoryStream:TMemoryStream;
    format:TStreamOriginalFormat;
begin
  result := false;
  if not FileExists(fileName) then exit;
  MemoryStream := TMemoryStream.Create;
  FileStream := TFileStream.Create(FileName,fmOpenRead);
  try
    if not asBinary then
    begin
      format := sofBinary;
      ObjectTextToBinary(FileStream,MemoryStream,format);
    end else MemoryStream.LoadFromStream(FileStream);
    MemoryStream.Position := 0;
    MemoryStream.ReadComponent(aCompo);
    result := true;
  finally
    FileStream.Free;
    MemoryStream.Free;
  end;
end;

end.
so kannst du dann speichern und laden:

Delphi-Quellcode:
SaveCompoToFile(YourDynForm,'c:\'+YourDynForm.name+'.dfm'); // zB.
//...
LoadCompoFromFile(YourDynForm,'c:\'+YourDynForm.name+'.dfm'); // zB.
ich hoffe das hilt dir deinen form-designer zu wuppen

cu,

maximov.

PS: Beim laden werden alle plazierten compos automatisch instanziert!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:28 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