![]() |
Formular mit Komponenten in laufender Anwendung erstellen.
Hi,
kann mir jemand sagen, wie man in einer laufenden Anwendung ein Form mit groupBoxen... erstellen kann??? Mfg Tobi |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Delphi-Quellcode:
Sollte in etwa hinhauen, allerdings gibts da noch einiges was man verfeinern kann :)
var
MyForm: TForm; MyBox: TGroupBox; MyForm := TForm.Create(Application); MyBox := TGroupBox.Create(MyForm); MyBox.Parent := MyForm; MyBox.Visible := True; MyForm.Show(); |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Cool, geht. danke!
Mfg Tobi |
Re: Formular mit Komponenten in laufender Anwendung erstelle
wie kann ich in das Formular noch einen Button machen der OnClick eine Prozedur ausführt???
Mfg Tobi |
Re: Formular mit Komponenten in laufender Anwendung erstelle
weiteres Prob:
Delphi-Quellcode:
ich hab im Source ne stelle markiert an der bringt er ne Exception das ein Stck überlauf wäre. Danach hängt sich das Programm inkl. Delphi auf :-(
procedure TForm1.Button1Click(Sender: TObject);
begin tanks[1].formular := TForm.Create(Application); tanks[1].formular.BorderStyle := bsSingle; tanks[1].Formular.BorderIcons := [biSystemMenu,biMinimize]; tanks[1].formular.caption := 'AbC'; tanks[1].formular.ClientHeight := 140; tanks[1].formular.ClientWidth := 290; tanks[1].p1 := TPanel.Create(tanks[1].formular); tanks[1].p1.Parent := tanks[1].formular; tanks[1].p1.Visible := true; tanks[1].p1.BevelOuter := bvNone; tanks[1].p1.caption := ''; tanks[1].p1.align := alClient; tanks[1].gp1 := TGroupBox.Create(tanks[1].formular); tanks[1].gp1.Parent := tanks[1].gp1; tanks[1].gp1.Visible := true; tanks[1].gp1.Caption := 'Test'; tanks[1].gp1.align := alBottom; tanks[1].r := TShape.Create(tanks[1].formular); tanks[1].r.Parent := tanks[1].gp1; tanks[1].r.Visible := True; //Hier Kommt der Stack-Überlauf tanks[1].r.Left := 10; tanks[1].r.Brush.Color := clMaroon; tanks[1].r.Shape := stCircle; tanks[1].r.Pen.Style := psClear; tanks[1].r.Width := 25; tanks[1].r.Height := 25; tanks[1].bar := TGauge.Create(tanks[1].formular); tanks[1].bar.Align := alLeft; tanks[1].bar.Parent := tanks[1].formular; tanks[1].bar.visible := true; tanks[1].bar.Kind := gkVerticalBar; tanks[1].bar.Width := 80; tanks[1].formular.Show(); end; |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Ich hab jetzt viel gelesen... Wie könnte ich das was ich machen will auf dem Heap anlegen???
Das ist die Dekleration:
Delphi-Quellcode:
UNd da kommt noch was dazu und das Array wird noch vergrößert.
tanks : Array[1..10] of Record
formular : TForm; p1 : TPanel; gp1 : TGroupBox; bar : TGauge; r,ge,gr : TShape; end; Mfg Tobi |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Hi,
erstelle das Formular doch einfach zur Design-Zeit. Dieses Formular kannst du dann in den Projekt-Optionen von den "automatisch erzeugten" zu den "verfügbaren" verschieben. Dadurch steht dir das Formular als "Schablone" zur Verfügung. Du kannst dann mehrere Instanzen davon erzeugen. Sonst ist mir noch folgendes ausfgefallen:
Delphi-Quellcode:
Viele Grüße,
tanks[1].gp1.Parent := tanks[1].gp1; // Das Parent der Komponente kann nicht die Komponente selbst sein
pszopp |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Das hab ich mitlerweile auhc gemerkt. Ich muss das Form im Projekt erzugen weil ich die Dynamisch brauche.
Der StackError ist nun weg. Kann mir nun noch jemand sagen wie ich ne prozedur bspw. in Form1 beim Button OnClick den ich über Create erzeugt hab aufrufen kann? |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Delphi-Quellcode:
Procedure YourProcedure(Sender: TObject)
begin // Dein Code end;
Delphi-Quellcode:
Hope it helps
Button.OnClick:= YourProcedure;
onlinekater PS: Nebenher bemerkt: Pro Thread ist nur eine Frage zulässig, mach bitte ggf. einen neuen auf. |
Re: Formular mit Komponenten in laufender Anwendung erstelle
;-) Das gehört immer noch zur Hauptfrage...
also wenn du deutsch kansch dann schreib au bitte so ;-) ok Und soweit war ich auch schon: tanks[a].status.OnClick := Status1Click; procedure Status1Click; begin showmessage('mmep'); end; -> Fehler Inkompatible Typen: MethodenZeiger und Reguläre Prozedur. Mfg Tobi |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Ja, ich kann Deutsch. Wenn Du Dir mal andere Posts von mir anguckst, wirst Du herausfinden, daß ich immer ein Hope it helps ans Ende setze.
Außerdem solltest Du dich vielleicht erst einmal selbst der korrekten deutschen Sprache befleißigen, bevor Du Dich beschwerst. Und was die englische "Benamselung" meines Codes angeht: Delphi spricht auch kein Deutsch! Außerdem hast Du meinen Post offensichtlich nicht wirklich richtig gelesen, sonst würdest Du nicht darauf verweisen, daß Du bereits Deine Prozedur so deklarierst:
Delphi-Quellcode:
In meinem Post stand:
procedure Status1Click;
Procedure YourProcedure (Sender: TObject) Schau mal in der Hilfe unter TNotifyEvent nach. Da findest Du dann die notwendigen Informationen. Hope it helps onlinekater |
Re: Formular mit Komponenten in laufender Anwendung erstelle
procedure Status1Click(Sender: TObject);
begin showmessage('mmep'); end; geht auch nicht und zwar mit dem gleichen Fehler... :zwinker: ja...ich hatte es nämlich so und dnn auch mal ohne probiert und eben das falsche online gestellt ;-) |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Kein Wunder das es nicht geht. Es muss schon ne Methode einer Objektinstanz sein...
|
Re: Formular mit Komponenten in laufender Anwendung erstelle
@Dax könntest du bitte ein Beispiel oder einen Link dazu geben???
|
Re: Formular mit Komponenten in laufender Anwendung erstelle
Liste der Anhänge anzeigen (Anzahl: 1)
angehängt mal ein Beispiel
Gruß onlinekater |
Re: Formular mit Komponenten in laufender Anwendung erstelle
:wall: so gehts doch nicht. IMHO liegt das an dem Array.
|
Re: Formular mit Komponenten in laufender Anwendung erstelle
Poste doch mal die komplette Unit (bitte als Anhang).
Dann kann ich gerne mal drüber schauen. Gruß onlinekater |
Re: Formular mit Komponenten in laufender Anwendung erstelle
Hi
Nun, ich versteh, das du verzweifelst... Also, versuch dich mal vom Array zu lösen Type .... TMyForm = Class(TForm) MyButton : TButton; MyList : TStringlist; MyEdit : TEdit; MyxObject: TxObject; //Was heissen soll, alle deine Elemente, die du in der Form brauchst, definierst du in Variablen // und nun die benötigten Prozeduren und Funktionen Procedure MyProc(....); Function MyFunc(....):MyVar; //und was du sonst noch brauchst..... end; In der Variablendeklaration setzt du deine Variable für dein Object var ...... MyForm : TMyForm; // oder sonstige abgeleitete Objecte... ..... MyStringList : TStringList; // manchmal nützlich, wenn man auf seine Objecte zurückgreifen möchte ... // weil über MyStringList.AddObject(xObject.Name,xObject); //das Object gespeichert wird //und dies zum Auffinden t:=MyListe.IndexOf(ObjName); // t ist eine Integervariable... if MyListe.Objects[ t ] is TMyObject then begin (MyListe.Objects[ t ] as TMyObject).TeilObject.OnClick:=(MyListe.Objects[ t ] as TMyObject).TeilObject_Click; .... //in diesem Fall war TMyObject ein TPanel mit Checkboxen, hier als Teilobject benannt.... // die OnClick-Methode muß zur Entwurfszeit geschrieben, zur Laufzeit den erzeugten Objecten zugewiesen werden end; So, nun zu deinen Form-Objecten Wenn du immer nur eines erzeugst, so brauchst du keine Liste,folgende Anweisung erledigt das und erzeugt dir ein Formular, welches du aber erst wieder schleißen mußt, bevor ein neues erzeugt werden kann. Application.CreateForm(TMyForm, MyForm); MyForm.Visible:=False; MyForm.ShowModal; MyForm.Free; ansonsten probier mal Application.CreateForm(TMyForm, MyForm); MyForm.Name:='MyForm'+intToStr(Zaehler); MyStringList.AddObject(MyForm.Name,MyForm); vergiss aber nicht, den Eintrag zu löschen, wenn du das Object schließt..... Viel Spass und tob dich erst mal aus Gruß oldmax |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz