Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi passwörter (***) in der listview? (https://www.delphipraxis.net/47447-passwoerter-%2A%2A%2A-der-listview.html)

100nF 12. Jun 2005 09:19

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

alzaimar 12. Jun 2005 09:25

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:
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;
Das OnChange-Event der 'Klartextpasswärter anzeigen'-Checkbox macht dann nur noch das:
Delphi-Quellcode:
Procedure Checkbox1Change (Sender : TObject);
Begin
  UserWantsToSeePassword := Checkbox1.changed;
  ListBox1.Invalidate;
End;
Füllen brauchst Du die Listview dann nicht mehr, du setzt nur noch
Delphi-Quellcode:
ListView1.Items.Count = MyUserData.Count
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!

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 12. Jun 2005 09:30

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...

100nF 12. Jun 2005 09:43

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:

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.
du hast da etwas falsch verstanden. diese passwörter kann nur der benutzer sehen, dem sie auch gehören. dieser loggt sich mit einem passwort ein, und bekommt dann nur seine passwörter zu sehen, und keine anderen. falls er eines vergessen hat, kann er die passwörter anzeigen lassen.


gruss
urbanbruhin

alzaimar 12. Jun 2005 10:08

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:)

Sharky 12. Jun 2005 10:24

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;

100nF 12. Jun 2005 10:26

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:

Wenn nur der Anwender seine Passwörter sehen kann, wozu dann mit '*' verstecken?
es könnte ja mal sein, dass jemand die tür reinkommt... und wenn man nur ein passwort hinzufügen will, braucht man ja die anderen passwörter nicht zu sehen...

auf jeden fall ist es so sicherer :mrgreen:

100nF 12. Jun 2005 10:50

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

Sharky 12. Jun 2005 11:14

Re: passwörter (***) in der listview?
 
Zitat:

Zitat von urbanbruhin
...aber ich glaube dass lass ich sein. ...

Hmmm.... dann musst Du die "markierung" einfach selber zeichnen ;-)

100nF 12. Jun 2005 11:18

Re: passwörter (***) in der listview?
 
Zitat:

Hmmm.... dann musst Du die "markierung" einfach selber zeichnen
das habe ich auch schon probiert, aber in diesem gebiet bin ich halt kein profi. darum habe ichs auch nicht hinbekommen.

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 15:53 Uhr.
Seite 2 von 2     12   

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