| Autor |
Beitrag |
Darken
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 04.10.06 16:44
hi,
ich hab nen dickes problem und habe auch schon im forum gesucht aber diesbezüglich nix gefunden also wollte ich mich persönlich an die community wenden. Ich bin noch net lange mit Delphi am werkeln... aber ich baue mir gerade nen kleines Prog. dabei geht es darum dass ich von form1. aus auf form 2 zugreifen möchte und sobald form2 aktiviert wurde läuft nen timer ab und dann starte der eine externe datei... soweit so gut das klappt auch alles... aber da ich mehrere buttons in form 1 habe und keine lust habe für jede button ne neue form zu machen die da dann erscheinen soll und dann die externe datei lädt( jeweils ne andere datei), dachte ich mir ich füge die variable 'erg' ein. also hab ich in form 1 geschrieben dass der form 2 öffnen soll und erg:= 1; ... dann füge ich bei form 2 ne simple if-Funktion ein mit 'if erg = 1 then'... so nun komm ich mal langsam zum problem... das funktioniert nämlcih net.. wenn ich in form ein für erg:= 1; angeben dann übernimmt form2 dies nicht für dessen variable erg.. kann ich das irgendwie machen, dass das funktioniert? um euch noch nen paar infos zu geben ... wenn ihr euch denkt was ist das denn für nen trottel, warum packt der sinnlos ne form dazwischen... in form 2 hab ich ne progressbar und das funktioniert auch alles prima.. nur um euch das problem leichter darzustellen hab ich das mit der progressbar net erwähnt..
vielen dank für eure hilfe
|
|
Marco D.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: Mi 04.10.06 16:46
Wie hast du 'erg' denn deklariert? 
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
Darken 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 04.10.06 16:51
nimm es mir net übel falsch ich jetzt falsch antworte... also ich hab var hingeschrieben erg:integer;
... hab erst seit nen paar wochen informatik und wir machen nur die spannenden turtlegrafiken ... ein hochgenuss des programmierens und darauf hab ich kein bock mehr und versuch halt mir selbst was beizubringen da ich schon html, css kann.. und auch schon vorher nen bissel ahnung von if-funktionen und for-schleifen hatte
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 04.10.06 17:06
Wir halten dich keines wegs für einen 'trottel'
Deklarier deine Variable einfach über Implentation! Denn alles was unter Implentation folgt, ist nur Unit-Intern sichtbar! Also:
Delphi-Quelltext 1: 2: 3: 4:
| var Form1: TForm1; global_erg: integer; implementation |
Gruß,
Marc
|
|
Darken 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 04.10.06 17:09
danke.. brauch halt noch übung ist aber nachher umso besser wenn wir endlcih in der schule was anderes mal als turtle-grafik... richtig langweilig..
|
|
Darken 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 04.10.06 18:02
hm kann es sein dass ich was falsch mache? ich hab das so wie du gesagt hast in der form1 und 2 deklariert aber das funzt trotzdem irgendwie net...
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mi 04.10.06 18:10
Poste am besten mal deinen Quelltext, dann lassen sich solche Probleme am leichtesten lösen.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 04.10.06 18:16
Darken hat folgendes geschrieben: | | hm kann es sein dass ich was falsch mache? ich hab das so wie du gesagt hast in der form1 und 2 deklariert aber das funzt trotzdem irgendwie net... |
Warum denn in beiden Units? Du darfst deine Variable natürlich nur in einer Unit deklarieren!
|
|
Darken 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 04.10.06 18:21
hier einmal unit1:
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, GIFImage, Menus, Buttons;
type TForm1 = class(TForm) GIFImage2: TGIFImage; GIFImage1: TGIFImage; GIFImage3: TGIFImage; GIFImage4: TGIFImage; GIFImage5: TGIFImage; GIFImage6: TGIFImage; procedure FormCreate(Sender: TObject); procedure CreateParams(var Params:TCreateParams); override;
procedure GIFImage3Click(Sender: TObject); procedure GIFImage4Click(Sender: TObject); procedure GIFImage5Click(Sender: TObject); procedure GIFImage6Click(Sender: TObject); private public end;
var Form1: TForm1; global_erg:integer; implementation
uses Unit2; {$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin Form1.Brush.Style:=bsClear; Form1.BorderStyle:=bsNone; end;
procedure TForm1.CreateParams(var Params:TCreateParams); Begin inherited CreateParams(Params); Params.ExStyle:=WS_EX_TRANSPARENT; end;
procedure TForm1.GIFImage3Click(Sender: TObject); begin global_erg := 1; Form2.Show;
end;
procedure TForm1.GIFImage4Click(Sender: TObject); begin form2.show; global_erg := 2; end;
procedure TForm1.GIFImage5Click(Sender: TObject); begin form2.show; global_erg := 3; end;
procedure TForm1.GIFImage6Click(Sender: TObject); begin form2.show; global_erg := 4; end;
end. |
und hier unit 2
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:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, GIFImage, ComCtrls, ShellApi, ExtCtrls;
type TForm2 = class(TForm) GIFImage1: TGIFImage; Timer1: TTimer; ProgressBar1: TProgressBar; procedure FormActivate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form2: TForm2; global_erg:integer; implementation
{$R *.DFM}
procedure TForm2.FormActivate(Sender: TObject); begin progressbar1.visible := true; timer1.Enabled := true; progressbar1.Max := 15; end;
procedure TForm2.Timer1Timer(Sender: TObject); begin if progressbar1.Position = progressbar1.Max then begin
if global_erg = 1 then ShellExecute(Handle, 'open', 'C:\Programme\ICQLite\ICQLite.exe', '', Nil, sw_ShowNormal); progressbar1.visible:= false; progressbar1.position:= progressbar1.Min; timer1.Enabled:= false; form2.close;
if global_erg = 2 then ShellExecute(Handle, 'open', 'C:\Programme\Mozilla Firefox\firefox.exe', '', Nil, sw_ShowNormal); progressbar1.visible:= false; progressbar1.position:= progressbar1.Min; timer1.Enabled:= false; form2.close;
end else progressbar1.Position := progressbar1.Position + 1; end;
procedure TForm2.FormCreate(Sender: TObject); begin progressbar1.Visible := false; timer1.Enabled := false; end;
end. |
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 04.10.06 18:27
Wie bereits oben erwähnt, sollte dein Globale_Variable in nur einer Unit vorkommen, da bei gleichnamigen, unitübergreifenden Variablen, immer die Variable aus der entsprechenden Unit verwendet wird.
Zudem könntest du statt der 2 fachen if-abfrage in unit2 ein einfaches case-of verwenden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ... case global_erg of 1: ShellExecute(Handle, 'open', 'C:\Programme\ICQLite\ICQLite.exe', '', Nil, sw_ShowNormal); 2: ShellExecute(Handle, 'open', 'C:\Programme\Mozilla Firefox\firefox.exe', '', Nil, sw_ShowNormal);
progressbar1.visible:= false; progressbar1.position:= progressbar1.Min; timer1.Enabled:= false; form2.close; ... | 
|
|
Darken 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 04.10.06 18:42
ich habe das in beide units deklariert weil sonst in unit2 nen fehler kommt und der sagt global_erg undefinierter bezeichner.. kann es sein dass das von delphi version abhängig ist? ich habe leider nur delphi2 von meinem infolehrer bekommen.. bei mir gingen schon so manche features net...z.b. wollte ich erst was mit transparent.color machen aber das gibts bei delphi 2 nicht
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mi 04.10.06 18:57
In der Unit 2 musst du auf global_erg mit den Formnamen der ersten Unit zugreifen:
Delphi-Quelltext 1: 2:
| case form1.global_erg of ... |
|
|
Darken 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 04.10.06 19:07
jetzt gehts endlich danke
|
|