Entwickler-Ecke
Sonstiges (Delphi) - Gauge will nicht funktionieren
sintec - Mi 23.05.07 11:17
Titel: Gauge will nicht funktionieren
Hallo an alle,
Ich habe ein Problem mit der Gauge und zwar: bekomme ich ständig beim kompilieren die Meldung " Feld Form1.Gauge besitzt keine entsprechende Komponente. Soll die Deklaration entfernt werden?"
Wenn man "ja" anklickt löscht er die Zeile "Gauge: TGauge;" und wenn man auf "nein" klickt, kompiliert er das Programm. Aber wenn man das Programm jetzt benutzen will, gibts den Fehler "Zugriffsverletzung bei Adresse 00443AE7 in Modul 'Form1.exe'. Lesen von Adresse 00000057." und zwar bei der ersten Zeile wo was mit Gauge steht (in meinem Fall "gauge.MaxValue := max;").
Kann mir einer helfen?
ZeitGeist87 - Mi 23.05.07 11:25
Entfern die Gauge vom Formular und gegebenenfalls auch die Deklaration oben und setz anschließend wieder ein auf die Form, und nenn sie wie die Alte.
LG
Stefan
sintec - Mi 23.05.07 11:33
ZeitGeist87 hat folgendes geschrieben: |
Entfern die Gauge vom Formular und gegebenenfalls auch die Deklaration oben und setz anschließend wieder ein auf die Form, und nenn sie wie die Alte.
LG
Stefan |
Was meinst du mit auf die Form setzen?
Delete - Mi 23.05.07 11:55
sintec hat folgendes geschrieben: |
Was meinst du mit auf die Form setzen? |
Die Komponente in der Komponetenleiste auswählen mit der Maus. Linke Maustaste gedrückt halten und ganz langsam die Maus über das Formular ziehen. Befindet sich der Mauszeiger über dem Formular, linke Maustaste loslassen. Diesen Vorgang bezeichnet man unteranderem als "auf die Form setzen". :?
sintec - Mi 23.05.07 12:07
Luckie hat folgendes geschrieben: |
sintec hat folgendes geschrieben: | Was meinst du mit auf die Form setzen? |
Die Komponente in der Komponetenleiste auswählen mit der Maus. Linke Maustaste gedrückt halten und ganz langsam die Maus über das Formular ziehen. Befindet sich der Mauszeiger über dem Formular, linke Maustaste loslassen. Diesen Vorgang bezeichnet man unteranderem als "auf die Form setzen". :? |
ich habe aber die Komponente nicht in der Komponetenleiste, also kann ich es auch nicht auf die form ziehen. Das wird irgendwie nur als Gauge.pas geöffnet mit reinem Quellcode.
Smikey - Mi 23.05.07 12:10
F12
mfg smikey
Blackheart666 - Mi 23.05.07 12:10
Was hast Du denn für eine Delphiversion, TGauge unter Beispiele.
sintec - Mi 23.05.07 12:24
Ich benutze den TurboExplorer für Delphi.
unter C:\Programme\Borland\BDS\4.0\source\Win32\Samples\Source habe ich ja die Gauge.pas die kann ich auch öffnen, aber dann bekomme ich nur reines Quellcode.
Als Komponente in der Komponentenliste gibts die dann auch nicht.
Stefan.Buchholtz - Mi 23.05.07 12:31
bei den kostenlosen Turbo-Versionen kann man Komponenten nicht in die IDE installieren, um sie im Formulardesigner zu verwenden.
Deswegen kannst du die Komponente auch nicht zur Designzeit auf dem Formular haben.
Dir wird nichts anderes übrigbleiben als die Komponente aus dem Formular entfernen zu lassen und sie dann zur Laufzeit, z.B. im FormCreate-Event selbst zu erzeugen und die Properties zuzuweisen.
Stefan
Blackheart666 - Mi 23.05.07 12:34
Dann versuch mal die Komponente zu erzeugen, weiss nicht genau ob das klappt.
Bei Uses Gauges
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var MyGauge:TGauge; begin MyGauge:=TGauge.Create(Self); MyGauge.Parent:=Form1; MyGauge.Top:=100; MyGauge.Left:=100; end; |
ZeitGeist87 - Mi 23.05.07 12:37
Blackheart666 hat folgendes geschrieben: |
Dann versuch mal die Komponente zu erzeugen, weiss nicht genau ob das klappt.
Bei Uses Gauges
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var MyGauge:TGauge; begin MyGauge:=TGauge.Create(Self); MyGauge.Parent:=Form1; MyGauge.Top:=100; MyGauge.Left:=100;
MyGauge.Name:= 'Gaugexyz'; end; | |
Nimm doch die Progressbar her :)
LG
Stefan
Stefan.Buchholtz - Mi 23.05.07 12:40
Ein Name ist bei zur Laufzeit erzeugten Komponenten nicht wirklich nötig.
Stefan
ZeitGeist87 - Mi 23.05.07 12:45
Stefan.Buchholtz hat folgendes geschrieben: |
Ein Name ist bei zur Laufzeit erzeugten Komponenten nicht wirklich nötig.
Stefan |
hmm und wenn er mehrere hat und sie ansprechen will?
Ok er kanns über ne globale Variable lösen, aber ich finds einfach besser, den Komponenten eindeutige Namen zu geben..
Stefan.Buchholtz - Mi 23.05.07 13:10
ZeitGeist87 hat folgendes geschrieben: |
hmm und wenn er mehrere hat und sie ansprechen will?
Ok er kanns über ne globale Variable lösen, aber ich finds einfach besser, den Komponenten eindeutige Namen zu geben.. |
Ich würde dann einfach in der Formularklasse Felder für die Komponenten deklarieren - natürlich keine globalen Variablen, die sind bäh :wink:
Also so:
Delphi-Quelltext
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:
| type TForm1 = class(TFrom) .... private Gauge1 : TGauge; Gauge2 : TGauge; ... public ... end;
...
procedure TForm1.FormCreate(Sender: TObject); begin Gauge1 := TGauge.Create(self); Gauge1.Parent := self; Gauge1.Top := 100; Gauge1.Left := 100; ...
Gauge2 := TGauge.Create(self); Gauge2.Parent := self; Gauge2.Top := 120; Gauge2.Left := 100; ... end; |
Dann kann man die weiter wie im Formulardesigner erzeugte Komponenten verwenden.
Der Formulardesigner erzeugt das Feld nur automatisch und gibt ihm den gleichen Namen wie die Komponente, damit das Streaming-System beim Erzeugen des Formulars die Komponente dem Feld im Formularobjekt zuweisen kann. Das passiert hier zu Fuss im FormCreate, der Name der Komponente selbst wird also nie verwendet und ist überflüssig.
Stefan
sintec - Mi 23.05.07 13:36
Das ist Super. Funktioniert wunderbar.
Vielen Dank
Aber das Problem mit der Meldung " Feld Form1.Gauge besitzt keine entsprechende Komponente. Soll die Deklaration entfernt werden?" habe ich immer noch.
ZeitGeist87 - Mi 23.05.07 13:47
Quelltext posten!
ZackZack :)
sintec - Mi 23.05.07 14:06
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| unit EWFileSave;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, shlobj, ComCtrls, AppEvnts, ExtCtrls, IniFiles, Ergebnis, Meldung, Gauges;
type TShutdownWindowsType = (swtShutdown, swtShutdownPowerOff, swtRestart, swtLogoff); TFileSave = class(TForm) Gauge: TGauge; ... procedure TFileSave.FormCreate(Sender: TObject); begin Gauge := TGauge.Create(self); Gauge.Parent := self; Gauge.Top := 370; Gauge.Left := 8; Gauge.Width := 419; Gauge.Height := 20; Gauge.Visible := false; end; |
Ich hoffe das reicht, denn der Code ist über 750 Zeilen lang.
Wenn ich bei der Meldung auf "Ja" klicke, löscht er die 13. Zeile.
ZeitGeist87 - Mi 23.05.07 14:16
sintec hat folgendes geschrieben: |
Delphi-Quelltext 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:
| unit EWFileSave;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, shlobj, ComCtrls, AppEvnts, ExtCtrls, IniFiles, Ergebnis, Meldung, Gauges;
type TShutdownWindowsType = (swtShutdown, swtShutdownPowerOff, swtRestart, swtLogoff); TFileSave = class(TForm) Gauge: TGauge; private Gauge: TGauge; public Gauge: TGauge; end; ... procedure TFileSave.FormCreate(Sender: TObject); begin Gauge := TGauge.Create(self); Gauge.Parent := self; Gauge.Top := 370; Gauge.Left := 8; Gauge.Width := 419; Gauge.Height := 20; Gauge.Visible := false; end; |
Ich hoffe das reicht, denn der Code ist über 750 Zeilen lang.
Wenn ich bei der Meldung auf "Ja" klicke, löscht er die 13. Zeile. |
sintec - Mi 23.05.07 14:22
gg :lol: man bin ich Blöd :lol:
Vielen Dank
sintec - Fr 25.05.07 13:39
Hallo nochmal,
ich habe ein kleines Problem mit der Gauge und zwar: wollte ich die Gauge auch in einem anderem Tool benutzen und bei dem Programm war früher ein ProgressBar auf einem Frame. Das Frame hat aber kein Ereignis namens FrameCreate oder FormCreate also kann ich es nicht zur Laufzeit erzeugen.
wie kann ich dann sonst machen?
ZeitGeist87 - Fr 25.05.07 13:55
sintec hat folgendes geschrieben: |
Hallo nochmal,
ich habe ein kleines Problem mit der Gauge und zwar: wollte ich die Gauge auch in einem anderem Tool benutzen und bei dem Programm war früher ein ProgressBar auf einem Frame. Das Frame hat aber kein Ereignis namens FrameCreate oder FormCreate also kann ich es nicht zur Laufzeit erzeugen.
wie kann ich dann sonst machen? |
Wie wärs im OnFormCreate?
sintec - Fr 25.05.07 13:59
ZeitGeist87 hat folgendes geschrieben: |
Wie wärs im OnFormCreate? |
meinst du bei dem Hauptfenster?
dann macht er mir die Gauge im Hauptfenster aber nicht im Frame!!
Stefan.Buchholtz - Fr 25.05.07 14:02
Du kannst einfach den Constructor des Frames überschreiben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TMyFrame = class(TFrame) ... public constructor Create(AOwner: TComponent); override; ... end;
...
constructor TMyFrame.Create(AOwner: TComponent); begin inherited; Gauge := TGauge.Create(self); ... end; |
Stefan
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!