Autor |
Beitrag |
Platon
      
Beiträge: 42
WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
|
Verfasst: Di 15.08.06 17:43
TForm1.LabelClick(Sender: TObject);
-> Funktion der Klasse TForm1
"Normalerweise" schreibst du die Funkion für das eine Event, da ist es meist unwichtig den Sender auszuwerten. Du setzt irgendwas oder irgenwas wird berechnet.
-> Da du aber die Funktion bei mehreren Labels - OnClick auslösen willst und es wichtig ist zu wisssen, welches Label gedrückt wurde, musst du den Sender auswerten.
-> Die Funktion "FeldClick(TLabel(Sender));" übergibt hier, da es sich bei dem Sender um ein Label handelt, das Label an die Funktion -> hier z.B. Label4
-> Die Procedure "TForm1.FeldClick(var Feld: TLabel)" wird nun mit "FeldClick(TLabel(Sender));" aufgerufen. In der Procedure "FeldClick" kannst du nun mit Feld.??? die Eigenschaften/Methoden von z.B. Label4 ansprechen...
-> Dies ist analog zu TButton etc. ("FeldClick(TButton(Sender));")
|
|
Platon
      
Beiträge: 42
WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
|
Verfasst: Di 15.08.06 17:47
Ich weiss am Anfang ist das alles etwas schweres Brot. 
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 15.08.06 18:04
[ot]In diesem Forum wird der exzessive Usus der Edit-Taste gern gesehen ... Muss ich jetzt die Richtlinien rauskramen? ^^[/ot]
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Platon
      
Beiträge: 42
WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
|
Verfasst: Mi 16.08.06 09:03
Sorry....beim nächsten mal !
|
|
pupu 
      
Beiträge: 104
WinXP
Borland Delphi 7, Turbo Pascal 7
|
Verfasst: Mi 16.08.06 13:44
alles klar dann hab ichs verstanden...aber ich hab noch eine frage
Wieso steht die Prozedur FeldClick(var Feld: TLabel); unter "public"? Weil ich aus anderen Prozeduren heraus auf diese zugreife? Was macht allgemein den Unterscheid zwischen den normalen Prozeduren die unter den Elementen (über "private"), unter "private" und unter "public" stehen?
edit: Ich habe hier ein Programm was ich grad machen möchte (verrat aber nich welches  ) und da habe ich unter ganz vielen Panels (100) jeweils einen RadioButton (also auch 100). Wenn man auf ein Panel klickt, soll der jeweilige RadioButton Visible werden...
Kann man diese Aktion auch irgendwie abkürzen? oder komm ich so gar nich um viele Zeilen hinweg? Ungefähr do:
ich klicke auf das Panel pA2 wird folgende Prozedur ausgeführt (wie oben im Beispiel, deshalb schreib ich das ganze ja noch in diesen Thread rein  )
Delphi-Quelltext 1: 2: 3: 4:
| Procedure TForm1.PanelClick(Sender:TObject); begin FeldClick(TPanel(Sender)); end; |
die Procedure FeldClick(var Feld: TPanel); sollte dann quasi den jeweiligen Radiobutton (im Beispiel: "A2") aufdecken, quasi "visible" machen.
Hab schon überlegt ob man das einfach mit 2 Parametern in der Prozedur FeldClick(); aber ich habe keinen Plan wie ich das bewerkstelligen soll...könnt ihr mir da helfen?
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mi 16.08.06 14:56
Ich würde es so machen:
Markiere alle Labels auf dem Formular, klick im Objektinspektor auf Ereignisse, und dort per Doppelklick auf OnClick. In dieser Prozedur hast du jetzt dein Sender und kannst machen was du willst. z. B:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.OnLabel1Click(Sender: TObject); var n: Integer; l: TLabel; begin l := TLabel(Sender); n := StrToInt(Copy(l.Name, 6, Length(l.Name) - 5)); TRadioButton(FindComponent('RadioButton' + IntToStr(n))).Visible := true; end; |
Die Prozedur (ungetestet) funktioniert nur, wenn die Labels alle Label1, Label2, ... und die RadioButtons alle RadioButton1, RadioButton2 ... heißen.
|
|
pupu 
      
Beiträge: 104
WinXP
Borland Delphi 7, Turbo Pascal 7
|
Verfasst: Mi 16.08.06 15:07
hm also ich habe 2 "spielfelder" mit jeweils 100 Panels und 100 drunterliegenden RadioButtons. Beim linken Feld sind die Panels mit "p" + die Lage bezeichnet (z.b. A2 oder C6) wie beim Schachbrett + "_2" als Kennzeichnung für das 2. Feld
z.B.: der passende Radiobutton ders 2. Spielfeldes zum Panel pA2_2 ist A2_2 ...muss ma sehn wie ich das umstrick oder ob das überhaupt so möglich ist
Ich hab die so benannt, um innerhalb des Programmierens mir die Panel- und Radiobuttonnamen besser merken zu können.
|
|
Platon
      
Beiträge: 42
WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
|
Verfasst: Mi 16.08.06 15:07
Die Prozedur FeldClick(var Feld: TLabel); kannst du auch unter privat schieben...funktioniert genauso !
Wenn du Programme für dich selbst schreibst, dann kannst du ruhig alles unter public schieben...
Interessant wird das erst, wenn du Klassen selber schreibst ! Also auch mal andere Klassen davon ableiten willst. Oder du Bibliotheken schreiben musst für andere, die diese dann verwenden wollen/müssen.
privat deklarierte Funktionen und Methoden sind nur in dieser Klasse sichtbar und verwendbar.
protected deklarierte Funktionen und Methoden sind in dieser Klasse und in allen abgeleiteten Klassen sichtbar und verwendbar.
Bsp: b ist eine Klasse....color ist eine Funktion in protected...dann kannst du mit a.color draufzugreifen. Wenn color privat wäre...geht das nicht.
a : b;
a := b.create;
a.color....
public deklarierte Funktionen und Eigenschaften sind immer sichtbar und verwendbar .
Wenn nix der gleichen drüber steht, wie über privat in unserem Beispiel, dann ist das public.
|
|
pupu 
      
Beiträge: 104
WinXP
Borland Delphi 7, Turbo Pascal 7
|
Verfasst: Mi 16.08.06 17:39
Chryzler hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.OnLabel1Click(Sender: TObject); var n: Integer; l: TLabel; begin l := TLabel(Sender); n := StrToInt(Copy(l.Name, 6, Length(l.Name) - 5)); TRadioButton(FindComponent('RadioButton' + IntToStr(n))).Visible := true; end; | |
Also Beispiel:
mein label heißt label2. Das wird nun an l übergeben. und in n wird gespeichert: label2 (als zahl???)6(warum 6?)1(quasi 6-5) also kommt bei inttostr(n) raus: label161
das ergibt alles für mich vorne und hinten irgendwie kein sinn...
aber ich hab bestimmt was falsch verstanden oder?
|
|
Platon
      
Beiträge: 42
WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
|
Verfasst: Mi 16.08.06 18:41
In n ist nur die Zahl. Wenn l 'Label2', dann ist n gleich 2. Somit könntest du mit r (siehe unten) den 'RadioButton2' ansprechen.
Dann versuch das mal und debugge mal !
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var n: Integer; l: TLabel; r: TRadioButton; begin l := TLabel(Sender); n := StrToInt(Copy(l.Name, 6, Length(l.Name) - 5)); r := TRadioButton(FindComponent('RadioButton' + IntToStr(n))); r.Visible := true; end; |
|
|
pupu 
      
Beiträge: 104
WinXP
Borland Delphi 7, Turbo Pascal 7
|
Verfasst: Mi 16.08.06 19:21
habs ausprobiert in einem neuen programm...aber ich hab immer noch nich verstanden was genau im einzelnen die anweisung " n := StrToInt(Copy(l.Name, 6, Length(l.Name) - 5));" macht...könnt ihr mir das nochmal erklären?
so schritt für schritt? danke erstmal für die ganzen mühen die ihr euch macht
EDIT:könnte ich das auch irgendwie auf gemischte namen anwenden? z.b. heißen meine Panels auf dem betroffenen Feld ja alle pA_2 oder so ähnlich... is es nötig dass ich die umbenenn? oder muss ich das so abwandeln, dass ich für alle die mit pA anfangen diese prozedur mach? eigentlich schon, aber bevorich die fest einbau möchte ich erstma wissen was im einzelnen sie macht 
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mi 16.08.06 19:50
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mi 16.08.06 20:04
|
|
pupu 
      
Beiträge: 104
WinXP
Borland Delphi 7, Turbo Pascal 7
|
Verfasst: Mi 16.08.06 21:14
boah geil klappt...besten dank...ich hoffe das war erstmal...
|
|