| Autor |
Beitrag |
Martello
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mo 30.03.09 14:54
Hallo,
ich habe eine UNIT gebastelt, die Mess-Daten aus einer Textdatei in einem Diagramm darstellt.
Das ganze habe ich als Projekt mit einer UNIT1 gespeichert.
Wie kann ich denn diese Diagrammdarstellung nun in ein anderes Projekt (mit einer Form1) einbinden? Dort werden bereits verschiedene Operationen mit den Daten durchgeführt. Die scrollbare Darstellung soll lediglich als weitere Auswahloption hinzugefügt werden.
Mo.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 30.03.09 15:05
Menüpunkt >> Neu >> Formular ? oder meinst du das anders?
Denn so verstehe ich das gerade.
|
|
Andreas Schilling
      
Beiträge: 128
Erhaltene Danke: 1
WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
|
Verfasst: Mo 30.03.09 15:26
Im alten Projekt das Formular umbenenen in Form2, dann über Menü "Datei --> Speichern unter" als Unit2.pas speichern und das andere Projekt öffnen. Die umbenannte Form zu den Quelltext des anderen Projekt kopieren und in Delphi über Menü "Projekt --> Projekt hinzufügen" die Unit2 einbinden in das neue Projekt.
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mo 30.03.09 15:38
Andreas Schilling hat folgendes geschrieben : | | Im alten Projekt das Formular umbenenen in Form2, dann über Menü "Datei --> Speichern unter" als Unit2.pas speichern und das andere Projekt öffnen. Die umbenannte Form zu den Quelltext des anderen Projekt kopieren und in Delphi über Menü "Projekt --> Projekt hinzufügen" die Unit2 einbinden in das neue Projekt. |
Aber der Objektinspektor hat was gegen Umbennnen einzuwenden:cry:
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 30.03.09 21:06
Martello hat folgendes geschrieben : | | Aber der Objektinspektor hat was gegen Umbennnen einzuwenden:cry: |
Wie meinst du das?
Die Unit und das Projekt kannst du (Ab Delphi 2005, vorher ist das etwas...  ) auch einfach rechts in der Projektverwaltung umbenennen. Klick auf das Projekt oder die Unit und drück F2. Das Formular selbst kannst du unter Name im Objektinspektor umbenennen.
Danach solltest du die andere Unit dem Projekt hinzufügen können.
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mo 30.03.09 22:13
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Di 31.03.09 17:08
Martello hat folgendes geschrieben : |
Es gibt wohl eine ganze Reihe von Möglichkeiten; irgendwie ist es mir dann auch gelungen. Aber wahrscheinlich habe ich diesmal noch nicht die eleganteste gewählt  |
In einer Anwendung ruft ein Mausklick auf Form1 die Form2 auf, dort kann ich erneut auf ein Button klicken... Das Mausklick-PingPong funktioniert prima. Daraufhin habe ich den Inhalt der UNIT2 mit anderem sinnvollerem Code gefüllt.
Die Kompilierung funktioniert, aber das PingPong versagt. Die Form2 erscheint überhaupt nicht, der "sinnvolle" Code wird nicht ausgeführt.
Die Anweisung in UNIT1
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Button1Click(Sender: TObject); begin application.createform(TForm2,Form2); form2.show; end; |
zeigt kein Form2
Woran könnte das liegen?
Mo.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 31.03.09 17:14
Du musst irgendwo etwas machen, was da Probleme macht, aber ohne den Code kann ich da nicht viel zu sagen.
Der gepostete Code ist korrekt, auch wenn ich es eher über einen normalen Konstruktoraufruf mache. Delphi-Quelltext 1: 2:
| Form2 := TForm2.Create(Self); ... |
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Di 31.03.09 20:07
Martello hat folgendes geschrieben : |
Du musst irgendwo etwas machen, was da Probleme macht, aber ohne den Code kann ich da nicht viel zu sagen.
|
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| program Project1;
uses Forms, Unit1 in 'Unit1.pas' , Unit2 in 'Unit2.pas' ;
{$R *.res}
begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. |
Form1 hat nur ein Botton...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin application.createform(TForm2,Form2); form2.show; end;
end. |
Form2 enthält den "sinnvollen Code":
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101:
| unit unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm2 = class(TForm) ScrollBar1: TScrollBar; Paintbox1: TPaintBox; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure PaintBox1Paint(Sender: TObject); procedure Button1Click(Sender: TObject); procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); private public end;
var Form2: TForm2; mylist: TStringlist; bmp: TBitmap; weite: integer; zeilen: integer;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject); begin
mylist:=TStringlist.create; mylist.loadfromfile('c:\ort\017.txt');
bmp := TBitmap.create; bmp.canvas.Brush.color:=clwhite; bmp.canvas.Pen.width:=1; bmp.Width:=paintbox1.width; bmp.Height:=paintbox1.Height;
weite:=round(mylist.count/paintbox1.width);
scrollbar1.Max:=round(mylist.count/weite); end;
procedure TForm2.FormDestroy(Sender: TObject); begin bmp.free; end;
procedure TForm2.PaintBox1Paint(Sender: TObject); begin BitBlt(Paintbox1.canvas.Handle,0,0,bmp.Width, bmp.Height, bmp.canvas.Handle,0,0,SrcCopy); end;
procedure TForm2.Button1Click(Sender: TObject); var i:integer; begin
bmp.canvas.moveto(0,paintbox1.height div 2);
for i:=1 to paintbox1.width do begin bmp.canvas.lineto(i,round(-10*strtofloat(mylist[i]))+paintbox1.height div 2); end; paintbox1.Repaint; end;
procedure TForm2.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
var i :integer;
begin
bmp.canvas.Rectangle(0,0,clientwidth,clientheight); bmp.canvas.moveto(paintbox1.width,paintbox1.height div 2); bmp.canvas.lineto(0,paintbox1.height div 2);
for i:=1 to paintbox1.width do begin if (i+weite*scrollbar1.position) < (mylist.Count-1) then bmp.canvas.lineto(i,round(-10*strtofloat(mylist[i+weite*scrollbar1.position]))+paintbox1.height div 2); end; paintbox1.Repaint;
end;
end. |
Ich wüßte nicht, wo der Fehler liegen könnte 
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 31.03.09 20:18
Abgesehen von der fehlenden Fehlerbehandlung und dem absoluten Pfad (c:\ort\017.txt) sehe ich da nichts ungewöhnliches. Häng das Projekt doch ganz an (mach den absoluten Pfad weg und ersetze den durch den deiner Exe oder so), dann könnte ich es testen und schauen woran es liegt.
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mi 01.04.09 16:44
Einloggen, um Attachments anzusehen!
|
|
René R.Fo.
      
Beiträge: 116
Win7
Delphi5 Delphi2005
|
Verfasst: Mi 01.04.09 17:03
Hallo
Wenn ich das richtig verstehe dan möchtest du ein 2. Form erzeugen
Dann Datei/Neu/Formular
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Visible := False;
Form2.Visible := True;
end;
Starte das Programm und Bestetige die Meldung.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 01.04.09 17:53
Ich hab mir das Programm angesehen. Ich dachte es mir ja fast schon...
Wie wäre es, wenn du den Button auch mit deiner Ereignisbehandlungsroutine verknüpfst? So steht unter Ereignisse im Objektinspektor bei OnClick gar nix und genau das macht Delphi dann auch dort: nix.
Klick doppelt auf den Button, in dem Fall reicht das schon...
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Mi 01.04.09 21:54
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 01.04.09 21:59
|
|
Martello 
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Do 02.04.09 08:39
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.04.09 13:33
Schau dir einmal die .dfm Datei an. Dort schreibt Delphi die Definitionen für die visuellen Komponenten hinein. Auch die Ereignisse.
Erreichen tust du diese Datei auch indem du mit rechts auf das Formular klickst und dann auf "Ansicht als Text", zurück kommst du mit "Ansicht als Formular".
Das sind ab Delphi 5 alles Textdateien, die man theoretisch auch manuell bearbeiten kann. Du kannst also einfach einmal schauen was da so alles automatisch passiert. Solange nicht viele Komponenten auf dem Formular liegen, ist die Formulardefinitionsdatei auch recht übersichtlich.
|
|
|