Autor |
Beitrag |
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 17.11.02 12:47
Okay, nur damit wir über das Gleiche sprechen:
Du hast drei Comboboxen, in denen der Nutzer für jede der drei Walzen eine Konfiguration laden kann. Wenn eine Konfiguration geladen wurde, soll sie für die anderen Walzen nicht mehr zur Verfügung stehen. Dafür möchtest Du eine einheitliche Prozedur schreiben.
Prinzipiell gilt: jede Ereignisbehandlungsroutine (wow, was für ein Wort!) besitzt eine fest definierte Form, d.h. jede Prozedur, die deise Aufgabe übernehmen, soll, muss dieser Form entsprechen. Hier wäre das also die Tatsache, dass sie einen Parameter vom Typ TObject haben muss.
Aber das ist eigentlich kein Hindernis. Entweder, Du machst es so, wie Ihr es für TButton gelernt habt (es sollte ja wirklich kein Problem sein, dass auf die Combobox zu übertragen), oder aber Du schreibst eine Prozedur, die den Anforderungen genügt, und weist sie allen Comboxes als OnChange-Prozedur zu. (Geht im Objekt Inspektor. Bei der Auswahl für das OnChange-Ereignis einfach die entsprechende Prozedur auswählen.) Dabei musst Du darauf achten, dass Deine eigene Prozedur zu TForm gehören muss!
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: So 17.11.02 14:20
Zitat: | Okay, nur damit wir über das Gleiche sprechen: |
Du hast den Durchblick!
Zitat: | Hier wäre das also die Tatsache, dass sie einen Parameter vom Typ TObject haben muss. |
Meinst du damit, dass im Prozedurkopf procedure WalzenAuswahl(Sender: TObject; WalzeX: String); stehen muss, oder etwas anderes?
Weil da weiss ich dann nicht, wie ich ein TObject geschweige denn eine Variable ins OnChange-Ereignis bringen kann!
Und hier stecke ich im Moment fest, da mir die Delphi-Hilfe nichts Vernünftiges anbietet. Also bin ich auf deine Genialität angewiesen  *superganzganzdolleschleim*
Ich habe auch schon probiert ohne Variable und über den ComboBox-Namen die aufgerufene ComboBox herauszufinden, aber auch habe ich nichts gefunden. Und weil ich den ComboBox-Namen ja nicht "weiss", kann ich auch nicht mit if ComboBox.Name = AuswahlWalze1.Name then ... arbeiten, weil die ComboBoxen ja AuswahlWalze1, 2, 3 heissen.
Zitat: | Du machst es so, wie Ihr es für TButton gelernt habt |
Netter Versuch, habe ich mir auch schon überlegt.
Aber dann muss ich ja für jede ComboBox erst die Standard-OnChange-Ereignis-Prozedur einbauen und dann meine eigene Prozedur für alle ComboBoxen, richtig?
Und das wäre dann wahrscheinlich länger, als alle Änderungen in den verschiedenen Standard-OnChange-Ereignis-Prozeduren einzubauen.
Zitat: | Dabei musst Du darauf achten, dass Deine eigene Prozedur zu TForm gehören muss! |
Meinst du damit, dass die eigene Prozedur TForm1.Irgendwas heissen muss?
Ich schätze das (ich da richtig liege und  ) das sein muss, weil ich die Prozedur ja als OnChange-Ereignis aufrufe und nicht aus einem OnChange-Ereignis oder einem anderem Ereignis heraus, richtig?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 17.11.02 14:57
Prozedurkopf: nein, so darf er nicht aussehen. Er darf nur den Parameter "Sender : TObject" enthalten. Wenn Du also eine eigene Ereignisbehandlung schreibst, darf sie auch nur den Parameter haben. Wenn Du also eine Behandlungsroutine hast
Quelltext 1: 2: 3: 4:
| procedure TForm1.auswahlchange(Sender : TObject); begin .... end; |
kannst Du diese jeder ComboBox als OnChange-Ereignis zuweisen. Sender enthält die Information, von welcher Combobox das Ereignis augewählt wurde. Abfragen kannst Du das so:
Quelltext 1:
| if TComboBox(sender).name = 'AuswahlWalze1' then ... |
(Kleiner Wink mit dem Zaunpfahl: das hatte ich schonmal für TImage geschrieben.)
Zitat: | Ich schätze das (ich da richtig liege und ) das sein muss, weil ich die Prozedur ja als OnChange-Ereignis aufrufe und nicht aus einem OnChange-Ereignis oder einem anderem Ereignis heraus, richtig? |
Du hast den Durchblick!
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Di 19.11.02 14:32
Danke!
Jetzt klappt das Aufrufen der Prozedur!
... Nur der Inhalt fehlt leider noch! 
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Di 19.11.02 19:33
Ich will ja die (z.B.) als 1. Walze verwendete Walze als 2. und 3. Walze "sperren". Dies mache ich im Moment mit ComboBox.Items.Delete und ComboBox.Items.Insert. Schließlich soll ja die verwendete Walze wieder "freigegeben" werden, wenn ich als 1. Walze eine andere nehme.
Gibt es da auch eine andere Möglochkeit, beispielesweise "richtiges Sperren"? Sprich: Die als 1. Walze verwendete Walze ist noch in der Auswahl der 2. und 3. Walze vorhanden, aber man sie nicht anklicken (in etwa wie beim Memofeld, das ich Enabled := False gesetzt habe).
Kann ich verhindern, dass man im Memofeld den eingegebenen Text markieren kann (mit VirtualKey vielleicht?).
Und dasselbe auch bei den ComboBoxen. Dort kann ich ja nicht nur auf den Pfeil zum Auswählen, sondern auch das Combofeld klicken. Das möchte ich auch irgendwie "sperren"?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 19.11.02 20:02
Zu Deiner letzten Frage: ändere den Style von csDropDown auf csDropDownList.
Zu Deinen anderen beiden Fragen: da weiß ich jetzt auch nichts zu. Vielleicht einfach mal im Forum suchen und wenn Du nichts findest, in einem separaten Thread posten. Das sind beides Sachen, die sicherlich auch andere interessieren dürfte.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Mi 20.11.02 18:20
Mir ist gerade zufällig in den Examples von Delphi 6 ein MainMenu ins Auge gesprungen (hat richtig wehgetan  )!
Gibt es etwas ähnliches mit dem Unterschied, dass man es irgendwo auf die form packen kann? Dann könnte ich nämlich die ComboBoxen durch so etwas ersetzen!
Mit csDropDownList kann ich zwar keine eigenen Sachen mehr in die ComboBox schreiben, allerdings habe ich auch kein ausgewähltes Standarditem mehr, oder kann man das einbauen?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 20.11.02 21:52
Mainmenu: hm, Du könntest es irgendwie über ein Popup-Menu machen. Ein hübsches Bildchen für die Walzen und wenn man rechts draufklickt, kann man sie ändern. Oder so ....
ComboBox: Stichwort "ItemIndex"
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Do 21.11.02 13:06
Ist das bei dem Memofeld so, dass die VirtualKeys nicht zu den normalen Zeichen zählen? Denn anders kann ich mir eigentlich nicht erklären, warum bei dieser Abfrage Quelltext 1: 2: 3: 4:
| procedure TForm1.KlartextKeyPress(Sender: TObject; var GedrueckteTaste : Char); begin if (GedrueckteTaste in ['a'..'z', 'A'..'Z', #8, #13]) then begin ... | die Shifttaste und damit das Markieren noch klappt. Allerdings gehört auch Enter zu den VirtualKeys und hat eine normale Zeichennummer (13).
Kann man Shift irgendwie sperren?
Ich habe deswegen einen neuen Thread gemacht, aber da will keiner posten!
P.S.: Ich habe das mit ItemIndex und csDropDownList ausprobiert. Aber ich habe es nicht hingekriegt. Wahrscheinlich meinst du da irgendetwas mit Active ode so, richtig? Das habe ich zwar in der Hilfe gefunden, funktioniert bei mir aber nicht, weil er cmActive nicht kennt. MAche ich was falsch?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 21.11.02 16:45
Manchmal habe ich den Eindruck, Du beschäftigst Dich gar nicht richtig mit den Sachen.
1. Es ist keine große Sache, herauszufinden, dass Shift im Memofeld gar kein OnKeyPress auslöst. Darüber kannst Du Shift also nicht sperren.
2. Wenn ich ItemIndex schreibe kann es ebenfalls keine große Sache sein, im Object Inspector auf ItemIndex zu klicken und F1 zu drücken!
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Do 21.11.02 19:11
Zitat: | Manchmal habe ich den Eindruck, Du beschäftigst Dich gar nicht richtig mit den Sachen. |
Das stimmt nicht. Ich probiere eine Menge Sachen aus, aber weil ich ja nur über ein beschränktes Wissen verfüge, weiss ich nur in wenigen Dingen, wie man das Problem auf andere Art lösen könnte.
Zitat: | Es ist keine große Sache, herauszufinden, dass Shift im Memofeld gar kein OnKeyPress auslöst. |
Gut das hätte ich herausfinden könne, wenn ich gewusst hätte, dass nicht alle Tasten ein OnKeyPress-Ereignis auslösen. Aber hier ist es dennoch mein Fehler, das gebe ich zu!
Kann man Shift dennoch irgendwie sperren?
Zitat: | Wenn ich ItemIndex schreibe kann es ebenfalls keine große Sache sein ... |
Das ist mir ehrlich gesagt neu (mit F1). Das hatten wir in der Schule nicht und wenn ich etwas über z.B. ItemIndex erfahren will, so gucke ich in die Hilfe. Aber dort finde ich meistens nichts Nützliches!
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 21.11.02 19:40
Zitat: | Das stimmt nicht. Ich probiere eine Menge Sachen aus, aber weil ich ja nur über ein beschränktes Wissen verfüge, weiss ich nur in wenigen Dingen, wie man das Problem auf andere Art lösen könnte. |
Sorry, ich bin in letzter Zeit etwas genervt.
Zitat: | Das ist mir ehrlich gesagt neu (mit F1). Das hatten wir in der Schule nicht |
Gruß an Deinen Lehrer, er soll euch auch beibringen, wie man sich selbst Sachen beibringt! Und da gehört F1 ganz bestimmt zur Standardmethode!
Zitat: | und wenn ich etwas über z.B. ItemIndex erfahren will, so gucke ich in die Hilfe. |
Guter Ansatz. Wenn ich im Hilfeindex "ItemIndex" eingebe, bekomme ich 'ne Menge nützlicher Hinweise.
Zitat: | Kann man Shift dennoch irgendwie sperren? |
Da muss ich auch passen. Aber wenn Mathias hier mal wieder vorbeischaut, hat er wahrscheinlich eine Idee dazu. Wenn es dringend ist, kannste ihm ja mal 'ne PM schreiben.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 22.11.02 18:58
Zitat: | Sorry, ich bin in letzter Zeit etwas genervt. |
Ist Okay! Geht schließlich jedem mal so!
Zitat: | Gruß an Deinen Lehrer, er soll euch auch beibringen, wie man sich selbst Sachen beibringt! |
Ich werde es ihm ausrichten!
Zitat: | Aber wenn Mathias hier mal wieder vorbeischaut, hat er wahrscheinlich eine Idee dazu. |
Ich kanns nur hoffen!
Aber es ist nicht so wichtig, nur es nervt halt ein bisschen dieser Makel im Programm! 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 22.11.02 19:15
Zitat: | nur es nervt halt ein bisschen dieser Makel im Programm! |
Das kenn' ich. Das geht mir auch so!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 22.11.02 19:29
Ich habe mir mal deinen Tipp mit "Shift" ist ein OnKeyDown-Ereignis mal angeguckt.
Bei OnKeyDown wird folgende Prozedur erzeugt: procedure TForm1.KlartextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Ich kann zwar nun über if Key=vk_Shift abfragen, ob "Shift" gedrückt wurde, aber ich kann dann ja Key nicht auf #0 setzen, weil es eine Word-Variabel ist und bei Shift gehen nur die Werte ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle und ssDouble.
Ich könnte ja Shift auf z.B. ssLeft stellen, damit ich kein "Shift" mehr drücken kann, aber ich weiss nicht, wie ich das mache. Mache ich es so if Key=vk_shift then Shift := TShiftState(ssLeft); dann kommt "Invalid typecast" und bei all meinen anderen Lösungen kommen Meldungen wie "Invalid typecast" oder "Incompatible types: 'TShiftState' and 'String'". Wie kann ich Shift einen Wert zuweisen?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 22.11.02 20:01
Hi!
Mir ist es gerade wie Schuppen von den Augen gefallen:
Quelltext 1:
| if (key IN [vk_left,vk_right,vk_down,vk_up])and (ssShift IN Shift) then key:=0; |
Das ins OnKeyDown-Ereignis und es klappt! *jubel*
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 22.11.02 20:55
Zitat: | Das ins OnKeyDown-Ereignis und es klappt! *jubel* |
Ich gehe wohl recht in der Annahme, dass ein Teil dieses *jubel* auf mein Konto geht, oder?
Ich habe es ausprobiert und es klappt auch bei mir!
Und das mit ItemIndex und csDropDownList funktioniert nun auch! *jubel* (Danke!  )
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 22.11.02 21:05
Zitat: | Ich gehe wohl recht in der Annahme, dass ein Teil dieses *jubel* auf mein Konto geht, oder? |
Sicher, durch Dein Posting bin ich ja auf die Idee gekommen, wie es funktioniert.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
D0P3 F!$H
Gast
Erhaltene Danke: 1
|
Verfasst: Sa 23.11.02 18:40
Zitat: | Sicher, durch Dein Posting bin ich ja auf die Idee gekommen, wie es funktioniert. |
Auch wenn Eigenlob stinkt: Ich habs verdient!
Kann ich eine nicht standardmäßig in Windows integrierte Schriftart in das Programm einbauen? Ich meine damit nicht einfach eine beliebige Schriftart im ObjectInspector auswählen, sondern ich möchte wiseen, ob diese Schriftart in der Anwendung, die Delphi beim Ausführen erstellt, mit drin ist. Oder kann ich z.B. eine Schriftartdatei in ein bestimmtes Verzeichnis packen und die Anwendung darauf verweisen, sollte diese Schriftart nicht in Windows dabei sein?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 23.11.02 20:34
Zitat: | Auch wenn Eigenlob stinkt: Ich habs verdient! |
Naja, einmal auf sechs Seiten kannste ja auch mal 'ne Idee haben.
Was die Schriftart angeht, da muss ich mal drüber nachdenken und mich auch ein bisschen damit beschäftigen. Du möchest praktisch so wie bei PDF-Dateien bestimmt Schriftarten einbetten, oder?
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Ist die Frage beantwortet? Das Problem gelöst?
Dann klicke hier, um das Thema entsprechend zu markieren!
|
|