| Autor |
Beitrag |
DiamondDog
      
Beiträge: 460
|
Verfasst: Mi 08.10.08 12:18
Hallo Leute,
ich hab da folgenden 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:
| procedure TfrmMain.NGUinGridSelectCell(Sender: TObject; ACol, ARow: Integer); var h:integer; statuspic:string; begin h:=NGUinGrid.SelectedRow; statuspic:=NGUinGrid.Cell[0,h].AsString; if statuspic = '1' then begin Image1.Visible:=True; Image2.Visible:=False; Image3.Visible:=False; Image4.Visible:=False; end; if statuspic = '2' then begin Image1.Visible:=False; Image2.Visible:=True; Image3.Visible:=False; Image4.Visible:=False; end; if statuspic = '3' then begin Image1.Visible:=False; Image2.Visible:=False; Image3.Visible:=True; Image4.Visible:=False; end; if statuspic = '4' then begin Image1.Visible:=False; Image2.Visible:=False; Image3.Visible:=False; Image4.Visible:=True; end; end; | Das funktioniert auch so ganz gut.
Nur hab ich jetzt das Problem das ich das auf 35 Bilder erweitern muss
und dann kommt da schon einiges zusammen.
Kann mir vll jemand Helfen den Code etwas kürzer zu machen?
Danke schon mal.
Mfg Dog
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 08.10.08 12:22
Delphi-Quelltext 1: 2: 3: 4:
| Image1.Visible := statuspic = '1'; Image2.Visible := statuspic = '2'; Image3.Visible := statuspic = '3'; |
|
|
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 08.10.08 12:27
Warum nimmst du so viele TImage-Komponenten? Pack die Bilder lieber in eine Ressource und lade diese dann in eine TImage-Komponente, das ist deutlich schneller, weil nicht die ganzen Bilder und die Komponenten beim Start geladen werden.
|
|
DiamondDog 
      
Beiträge: 460
|
Verfasst: Mi 08.10.08 12:27
Ok das funkrioniert so weit, hab jetzt nur das Problem das alle andern,
auf False gesetzt werden müssen weil sonst das Bild was gezeigt werden soll,
überlegt wird und man es nicht sieht.
Wie mach ich den das?
jaenicke hat folgendes geschrieben : | | Warum nimmst du so viele TImage-Komponenten? Pack die Bilder lieber in eine Ressource und lade diese dann in eine TImage-Komponente, das ist deutlich schneller, weil nicht die ganzen Bilder und die Komponenten beim Start geladen werden. |
Wenn du mir dafür ein Beispiel geben könntest wäre das echt super,
weil damit kenn ich mich leider nicht aus.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 08.10.08 12:30
Versteh ich nicht ganz. Außerdem schau Dir mal die Frage von jaenicke an, die erscheint mir nicht unberechtigt.
[edit] http://www.delphi-fundgrube.de/faq01.htm, such da mal nach dem Stichwort Ressoure [/edit]
|
|
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 08.10.08 12:36
DiamondDog hat folgendes geschrieben : | Ok das funkrioniert so weit, hab jetzt nur das Problem das alle andern,
auf False gesetzt werden müssen weil sonst das Bild was gezeigt werden soll,
überlegt wird und man es nicht sieht. |
Genau das macht DeddyHs Quelltext ja, du musst die nur vorher via Objektinspektor unsichtbar machen, da sonst bis zum ersten Klick eben alle sichtbar sind.
Trotzdem: ich rate dir dringend zu einer anderen Vorgehensweise, zum Beispiel der von mir geposteten.
Eine Anleitung gibts hier, wie man Bilder so speichert und lädt:
www.delphi-library.d...iewtopic.php?t=85876
Bei LoadFromResourceName musst du den Namen dann aus dem festen Namen und deiner Zahl zusammensetzen  : Delphi-Quelltext 1:
| Image1.Picture.Bitmap.LoadFromRessourceName(hinstance, 'bild' + NGUinGrid.Cell[0,h].AsString); | // EDIT:
Und natürlich die unter Schritt 4 so nennen, dass die Namen mit dem jeweiligen Statusbild übereinstimmen  .
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: Mi 08.10.08 12:47
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TfrmMain.NGUinGridSelectCell(Sender: TObject; ACol, ARow: Integer); var i : Integer; begin for i:= 1 to Image_Count do frmMain.FindComponent('Image'+inttostr(i)).Visible := false; frmMain.FindComponent('Image'+NGUinGrid.Cell[0,NGUinGrid.SelectedRow].AsString)).Visible := True; end; |
*edit* hrgs das passiert wenn man Abschicken nach 20 Minuten anclickt...
Zuletzt bearbeitet von Jerk am Mi 08.10.08 13:58, insgesamt 2-mal bearbeitet
|
|
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 08.10.08 13:29
Jerk hat folgendes geschrieben : | | *edit* hrgs das passiert wenn man Abschicken nach 20 Minuten anclickt... |
Aktiviere in deinem Profil AJAX  , dann werden neue Antworten automatisch angezeigt und ein Hinweis eingeblendet, auch wenn du noch nicht auf Abschicken geklickt hast  .
|
|