![]() |
passwörter (***) in der listview?
hi,
ich wollte mal fragen ob es möglich ist, EINE(nicht alle!) spalte in der listview(vsReport) als passwort anzeigen lassen, dass nur *** angezeigt werden. man sollte in programm einstellen können, ob es als passwort angezeigt werden soll oder als klartext. ich hoffe es ist möglich... gruss urbanbruhin |
Re: passwörter (***) in der listview?
Hi!
Ich denke mal das musst du per Hand übernehmen ;) mfg phlux :hi: |
Re: passwörter (***) in der listview?
hi,
und wie macht man das? |
Re: passwörter (***) in der listview?
In einer for-Schleife die items durchgehen, und ein bestimmtes Subitem durch Sternchen ersetzen (StringofChar) ;)
|
Re: passwörter (***) in der listview?
Zitat:
|
Re: passwörter (***) in der listview?
Ihr vergesst dabei aber, dass der String dann auch *** ist!
Eine Abfrage des Passworts wird dabei z.B. unmöglich! ;) //edit: Man könnte das Passwort im Klartext dann auch in eine Variable speichern, mit der man dann abfragt. |
Re: passwörter (***) in der listview?
Delphi-Quellcode:
also am besten eine stringlist, oder?
Man könnte das Passwort im Klartext dann auch in eine Variable speichern, mit der man dann abfragt.
|
Re: passwörter (***) in der listview?
Zum Beispiel. Das ist in dem Falle wohl das einfachste, da der Itemindex sogar gleich mit dem der ListView übereinstimmt.
|
Re: passwörter (***) in der listview?
ok, dann probiere ich es mal so...
danke für die antworten! MFG urbanbruhin |
Re: passwörter (***) in der listview?
Hai,
am einfachsten dürfte es wohl sein einfach die Ausgabe des Textes zu ändern ;-) Wozu extra eine Stringliste verwalten wenn es doch nur darum geht das die Passwörter nicht angezeigt werden :stupid: Der Code geht davon aus das die Passwörter in der zweiten Spalte (SubItem = 1) stehen. Über CheckBox1 wird entschieden ob sie gezeigt werden oder nicht.
Delphi-Quellcode:
uses
CommCtrl; procedure TForm1.CheckBox1Click(Sender: TObject); begin ListView1.Repaint; end; procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: integer; State: TCustomDrawState; var DefaultDraw: boolean); var rect: TRect; begin if (SubItem = 1) and (CheckBox1.Checked) then begin DefaultDraw := False; ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @rect); DrawText(Sender.Canvas.Handle, PChar('******'), Length('******'), rect, DT_SINGLELINE or DT_END_ELLIPSIS); end else begin DefaultDraw := True; end; end; procedure TForm1.ListView1Click(Sender: TObject); begin Edit1.Text := ListView1.Items[ListView1.ItemIndex].SubItems[0]; end; |
Re: passwörter (***) in der listview?
hi Sharky,
vielen dank für deine antwort!! si funktioniert FAST... also das erste problem ist noch, dass als passwort immer ***** angezeigt wird. das problem dabei ist, dass die länge nicht mit der länge des passworts überrein simmt. ich habe schon ein bisschen herumprobiert, aber ich habe es nicht rausgefunden, wie man das ändern lönnte. das zweite problem ist, dass der text der spalten hinter der passwort-spalte fett ist. ich kann mir einfach nicht erklären, wieso... ich wäre sehr dankbar, wenn du eine lösung dazu hättest :mrgreen: edit: ich glaube die spalten hinter der passwort-spalte werden nicht fett, sondern eine size grösser, und die schriftart wird geändert. gruss urbanbruhin |
Re: passwörter (***) in der listview?
Ich würde es über die OwnerData-Property versuchen. Dann musst Du das OnData-Eregnis angeben, das für jedes ListViewItem aufgerufen wird. Dadrin füllst Du alle Werte des ListItems und die entsprechende Spalte mit '*' oder dem Klartext.
Delphi-Quellcode:
Das OnChange-Event der 'Klartextpasswärter anzeigen'-Checkbox macht dann nur noch das:
Procedure ListView1Data(Sender: TObject; Item: TListItem);
Begin Item.Caption := MyUserData[Item.Index].UserName; Item.ImageIndex := MyUserData[Item.Index].UserGroupIndex; // <-- Verschiedene bmps für Usergruppen z.B. If UserWantsToSeePassword Then Item.SubCaptions.Add(MyUserData[Item.Index].UserPassword) Else Item.SubCaptions.Add('****************'); End;
Delphi-Quellcode:
Füllen brauchst Du die Listview dann nicht mehr, du setzt nur noch
Procedure Checkbox1Change (Sender : TObject);
Begin UserWantsToSeePassword := Checkbox1.changed; ListBox1.Invalidate; End;
Delphi-Quellcode:
Beim Einfügen und Löschen von MyUserData-Einträgen setzt Du die Count-Eigenschaft einfach neu. Nochmal: Die ListView.Items fässt Du nie direkt an!
ListView1.Items.Count = MyUserData.Count
IMHO sollten die OnDraw-Events nur dann verwendet werden, wenn man etwas am Layout ändern will. z.B. Progressbars in Spalten reinmalen oder so. Aber nix gegen die Lösung von Sharky, denn viele Wege führen zum Ziel :wink: @urbanbruhin: Ich würde die Anzahl der * nicht mit der Länge des Passwortes gleichsetzen, weil man dann gleich sehen kann, wer ein 'schwaches' Passwort hat. |
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Sonstige Fragen zu Delphi" nach "VCL / WinForms / Controls" verschoben.
Es geht um eine VCL-Komponente, deshalb schiebe ich es mal in die entsprechende Sparte... |
Re: passwörter (***) in der listview?
hi alzaimar,
danke für deine antwort, aber irgendwie bekomme ich die nicht zum laufen. ich blick auch nicht durch, wie sie funktionieren sollte. trotzdem danke. Zitat:
gruss urbanbruhin |
Re: passwörter (***) in der listview?
Liste der Anhänge anzeigen (Anzahl: 1)
Hab gerade für ein anderes Forum (die Konkurrenz :stupid:) ein Beispielprojekt mit OwnerData-Listviews erstellt. Schau's Dir an.
Achte darauf, das die ListView 10.000 Einträge hat. Geht auch mit 2.000.000.000! Dort ist auch Code, um die Checkbox-Funktionalität, die normalerweise vorhanden ist, nachzubilden. Ich finde das Verfahren mit OwnerData=True aufgeräumt, weil das Befüllen der ListItems zentral an einer Stelle stattfindet und strikt zwischen Daten und Darstellung getrennt wird. Zu den '*': Wenn nur der Anwender seine Passwörter sehen kann, wozu dann mit '*' verstecken? Wegen der Spione, die ihm über die Schulter schauen? Na dann doch erst Recht verschleiern... Aber, is deine Sache (wie sowieso Alles andere auch :zwinker:) |
Re: passwörter (***) in der listview?
Und hier noch einmal das ganze im OnDrawSubItem ;-)
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: integer; State: TCustomDrawState; var DefaultDraw: boolean); var rect: TRect; Text: string; begin DefaultDraw := False; if (SubItem = 1) and (CheckBox1.Checked) then begin Text := StringOfChar('*',Length(Item.SubItems[0])) end else begin Text := Item.SubItems[SubItem - 1] end; ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @rect); (Sender as TListView).Canvas.TextRect(rect, Text); end; |
Re: passwörter (***) in der listview?
hi,
mit dem anhang konnte ich leider nicht viel anfangen, da ich keine checkboxes in der listview habe... Zitat:
auf jeden fall ist es so sicherer :mrgreen: |
Re: passwörter (***) in der listview?
@Sharky :
dein code funktioniert wunderbar!! ein nachteil ist, dass nicht mehr die ganze zeile markiert werden kann, aber ich glaube dass lass ich sein. vielen dank!! :mrgreen: MFG urbanbruhin |
Re: passwörter (***) in der listview?
Zitat:
|
Re: passwörter (***) in der listview?
Zitat:
wenn du das auch noch programmieren würdenst, wäre ich sehr dankbar! zur information: die listview hat vier spalten. die hinteren drei werden nicht markiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz